zoukankan      html  css  js  c++  java
  • unity3d学习重点记录

    本文主要是记录在学习unity3d中遇到的重点功能的实现,以及一些API的使用方法。以便在以后使用到的时候查找。

    1,给一个UIButton添加执行的事件

     1 // Use this for initialization
     2     void Start () {
     3 
     4         //在这里定义一个UIButton
     5         UIButton btn = this.transform.Find("btn").GetComponent<UIButton>();
     6         //当前个btn被点击的时候,需要执行一些事件,比如walk();
     7         EventDelegate walk = new EventDelegate(this,"walk");
     8         btn.onClick.Add(walk);
     9     }
    10 
    11     void walk()
    12     {
    13 
    14     }

    2,从GameObject上获取组件

      只要是在一个GameObject上面绑定的组件,都可以能过GetComponent方法找到,例如,我下面是绑定的数据:

    1      ServerProperty serverProperty = go.GetComponent<ServerProperty>();
    2      serverProperty.Name = name;
    3      serverProperty.ip = ip;
    4      serverProperty.count = count;        

      这是某个GameObject的实例go上绑定的一个数据对象ServerProperty,通过这个方法可以获得这个绑定的对象。

      在一个对象的上下文中,还可以能过transform.Find("Name").GetComponent;获取某个组件,例如:

      

    1   public string Name {
    2         get { return serverName; }
    3         set {
    4             serverName = value;
    5             transform.Find("ServerNameLabel").GetComponent<UILabel>().text = serverName;
    6         }
    7 
    8     }

      这是当set Name的时候,给某个组件的label赋值,通过label的名字ServerNameLabel找到这个Label,然后给它赋值。

    3,父子组件间方法调用及传参

      我们在使用NGUI的时候,一般在UI root上面会绑定一个总的控制脚本,即大部分的事件处理都在这个脚本中处理。当某个子组件的一个事件被触发时,需要在ui root的脚本中处理,那么该怎么办呢?如下:

      1,某个子组件被按下

    1  public  void OnPress(bool isPress)
    2     {
    3         if (!isPress)
    4         {  //发送消息:1,方法名,2,发送的参数
    5             transform.root.SendMessage("setSelectedServer",gameObject);
    6         }
    7     }
      

      2,接收的方法,这个方法所在的脚本在ui root上面

    1  public void setSelectedServer(GameObject go)
    2     {
    3         sp = go.GetComponent<ServerProperty>();
    4         serverSelected.GetComponent<UISprite>().spriteName = go.GetComponent<UISprite>().spriteName;
    5         serverSelected.transform.Find("ServerNameLabel").GetComponent<UILabel>().text = sp.Name;
    6     }

       3,Unity3d导入FBX文件模型拖到NGUI root之后不显示模型的解决方法  

        我们在使用NGUI开发UI的时候,有时会导入一些3d模型的fbx文件。当把fbx的prefab拖到NGUI root之后,发现它的摄像机捕获不到这个模型。这里的原因主要是Layer不一样。

        1,用鼠标选中UI Root之后,查看Inspector,发现Layer是空的,而添加的fbx模型的Layer是Default。

        2,UI Root的摄像机只获取UI Root所在的Layer。而fbx模型不在这个Layer上面。

        3,给UI Root添加Layer新的命名:点击Layer->Add Layer,在User Layer 8或其它的层级上命名:NGUI Root Layer。

        4,给fbx模型选择NGUI Root Layer就可以了。

        5,还要注意一下fbx的Z轴位置,不要在UI在后面。

        4,动态添加UISprite

      

    1.把制作好的UIAtlas放在Resources文件夹中,在Resources中的其它文件夹中也可以
    
    2.动态加载UIAtlas :UIAtlas  traceAtlas_ = Resources.Load("myAtlas",typeof(UIAtlas)) as UIAtlas; //myAtlas就是所创建的图集的名字,这里不用写后缀。
    
    3.从traceAtlas_选择自己需要的图片进行动态创建(多个,并拼在一起):
    for( int ii = 0 ; ii < 30;ii++)
    {
    //12_1图集中的某张小图片名字
    UISprite sprite0 = NGUITools.AddSprite(gameObject,traceAtlas_,"12_1");
    //通过获取图片的长度和宽度
    sprite0.transform.localScale = new Vector3(sprite0.sprite.inner.width,sprite0.sprite.inner.height,1);
    sprite0.transform.localPosition = new Vector3(454.9026f+ii*sprite0.sprite.inner.width,0,0);
    sprite0.MakePixelPerfect();
    }
    

      5,代码添加Prefab,并且获取Prefab中的UISprite,并更换sprite的图片

      

        //Card是在Resources目录下的一个Prefab的名字
         GameObject cardSprites = Resources.Load("Card") as GameObject;
            UISprite uisrite = cardSprites.GetComponent<UISprite>();
           //更新UISprite中的图片,这个是当前Sprite所在图集中的一个图片的名字
            uisrite.spriteName = "poker_112";
           //将生成的cardSprites添加到另外一个gameobject中,并做为这个gameobject的子类,
          //这里需要注意的是,必须用等号赋值一下,否则最后两行不起作用。
            cardSprites = centerPokerPos.AddChild(cardSprites);
            cardSprites.transform.Rotate(new Vector3(0, 0, 90));
            cardSprites.transform.localScale = new Vector3(1, 0.6f, 1);        
    

    参考文章:http://www.youxijishu.com/h-nd-148-2_323.html

  • 相关阅读:
    TWaver3D直线、曲线、曲面的绘制
    react开发教程(六)React与DOM
    java Web开发实现手机拍照上传到服务器
    手把手教你从零写一个简单的 VUE--模板篇
    file_get_contents函数获取不到数据的一种情况
    Windows系统下批处理快速创建WIFI
    操作系统题库之简答题部分(个人整理,附带答案)
    回溯到底是个什么东西(含有大量经典例题加详细分析)
    到底什么是dp思想(内含大量经典例题,附带详细解析)
    一次性弄懂到底什么叫做分治思想(含有大量经典例题,附带详细解析)
  • 原文地址:https://www.cnblogs.com/wgslucky/p/6006254.html
Copyright © 2011-2022 走看看