UGUI布局组件与Scroll View控件(下拉)摇杆控制物体移动

三种布局

1. Horizontal Layout Group水平布局


图1-1

2. Vertical Layout Group垂直布局


图1-2

3. Grid Layout Group网格布局


图1-3

Scroll View控件

Scroll Rect组件


图1-4

实例:

实现点击button按钮,获取到对应的下拉列表,在点击一次会清除列表,列表内的各项数据都是经过获取对应的值


图1-5

mainUI类

public class mainUI : MonoBehaviour {    

GameObject _serverItem;   

 Transform _parent;   

 Button _button;  

  ListitemGroup = new List();   

 //数据(实际开发中数据从服务器获取)

    ListinfoGroup = new List();   

 void CreatTemDate()    {  

      infoGroup.Clear();    

    Rankinginfo _tempRInfo = new Rankinginfo();    

    _tempRInfo._id = 100;

        _tempRInfo._name = "张三丰";   

     _tempRInfo._lv = 80;       

 _tempRInfo._iconRes = "main_btn_gohome01";  

      _tempRInfo._job = "狂战士"; 

       infoGroup.Add(_tempRInfo);    

    Rankinginfo _tempRInfo_a = new Rankinginfo();     

   _tempRInfo_a._id = 101;     

   _tempRInfo_a._name = "李连杰";  

      _tempRInfo_a._lv = 70;     

   _tempRInfo_a._iconRes = "main_btn_next02"; 

       _tempRInfo_a._job = "魔法师";    

    infoGroup.Add(_tempRInfo_a); 

       Rankinginfo _tempRInfo_b = new Rankinginfo();   

     _tempRInfo_b._id = 102;  

      _tempRInfo_b._name = "甄子丹";   

     _tempRInfo_b._lv = 60;       

 _tempRInfo_b._iconRes = "main_btn_rock_1";    

    _tempRInfo_b._job = "弓箭手";     

   infoGroup.Add(_tempRInfo_b);  

  }    

void Awake()    {   

     CreatTemDate();       

 _serverItem = transform.Find("Scroll View/item").gameObject;       

 _parent = transform.Find("Scroll View/Viewport/Content");   

     _button = transform.Find("Button").GetComponent();   

     _button.onClick.AddListener(ButtonFun); 

   }    

bool isshow = false; 

   void ButtonFun()    {   

     if (!isshow)        {      

      CreatItem();         

   isshow = true;   

     }       

 else      

  {            

for (int i = 0; i < itemGroup.Count; i++)        

    {               

 Destroy(itemGroup[i]);    

        }            

isshow = false;    

    }    

}      

  //根据数据创建UI  

  GameObject _tempItem;  

  void CreatItem()    {    

    if (infoGroup.Count > 0)    

    {           

 for (int i = 0; i < infoGroup.Count; i++)     

       {              

  _tempItem = Instantiate(_serverItem) as GameObject;  

              _tempItem.transform.parent = _parent;          

      _tempItem.transform.localPosition = Vector3.zero;  

              _tempItem.transform.localScale = Vector3.one;   

             _tempItem.transform.localRotation = new Quaternion();      

          severitem _serItem=_tempItem.AddComponent(); 

               _serItem._name = _tempItem.transform.Find("name").GetComponent();                _serItem._name.text = infoGroup[i]._name;     

           _serItem._LV = _tempItem.transform.Find("Lv").GetComponent(); 

               _serItem._LV.text = infoGroup[i]._lv.ToString();  

              _serItem._job = _tempItem.transform.Find("job").GetComponent(); 

               _serItem._job.text = infoGroup[i]._job;        

        _serItem._icon = _tempItem.transform.Find("Icon").GetComponent();          

      _serItem._icon.sprite = Resources.Load(infoGroup[i]._iconRes, typeof(Sprite))as Sprite;                itemGroup.Add(_tempItem);         

   } 

       }        

else        {         

   Debug.Log("Way?");

//网络层 查看数据,询问后端是否发送了数据   

     } 

   }

Rankinginfo类

public class Rankinginfo : MonoBehaviour {

public  uint _id;

public string _name;

public uint _lv;

//头像

//  int _headIconId;//100 101  config(配置文件)通过ID 读取本地配置表 获取头像的资源名

public string _iconRes;//头像名

public string _job;

severitem类

public class severitem : MonoBehaviour {

public Text _name;

public Image _icon;

public Text _LV;

public Text _job;

实现摇杆控制物体移动效果如图(1-6)


图1-6

为Cube添加组件Character Controller(角色控制器)


图1-7

Event Trigger组件(添加在移动的中心圆点)

为该对象添加事件

BeginDrag()按下的那一帧执行

Drag()拖动时执行

EndDrag()拖动结束时执行

图1-8

实现代码

float radius = 50;//摇杆面板的一半

  public GameObject _player;//摇杆控制的角色

    float _speed = 6f; //角色移动的速度

  RectTransform _selfTransform; //摇杆的当前位置

  Vector3 _selfStarPos;  //摇杆的起始位置

  public void OnBeginDrag()    {    

    Debug.Log("AAA");   

 }   

 public void Drag()    {  

      if (Vector3.Distance(Input.mousePosition, _selfStarPos) <= radius)  //如果当前位置与原始位置的距离小于半径,就可以直接拖拽

      {           

_selfTransform.position = Input.mousePosition;      //当前位置即是鼠标移动的位置

 }        

else 

       {            

Vector3 dir = Input.mousePosition - _selfStarPos; //得到方向向量

          _selfTransform.position = dir.normalized * radius + _selfStarPos;    //把方向转化为单位向量,然后再乘以半径,这样摇杆就不会跑到外面了

   }    

}   

 public void EndDrag()    {   

    _selfTransform.position = _selfStarPos;  //摇杆回到原始位置

 }    

public void FixedUpdate()    {   

     if (_selfTransform.position!=_selfStarPos)   

     {          

  if (Vector3.Distance(Input.mousePosition, _selfStarPos) <= radius)  

          {               

 float x = (Input.mousePosition - _selfStarPos).x;        

        float y = (Input.mousePosition - _selfStarPos).y;    

            Vector3 dir = new Vector3(x, 0, y);        

        _player.GetComponent().SimpleMove((dir * Time.deltaTime * _speed)); //SimpleMove以一定的速度移动角色。

          }        

    else        

    {              

  float x = (Input.mousePosition - _selfTransform.position).x;    

            float y = (Input.mousePosition - _selfTransform.position).y;     

           Vector3 dir = new Vector3(x, 0, y);         

       _player.GetComponent().SimpleMove((dir * Time.deltaTime * _speed));     

       }     

   }  

  }    // Use this for initialization   

 void Start () {      

  _selfTransform = GetComponent();//得到摇杆的transform组件

_selfStarPos = transform.position;//通过组件得到摇杆开始拖拽的位置

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容