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

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

 // Use this for initialization
void Start () { //在这里定义一个UIButton
UIButton btn = this.transform.Find("btn").GetComponent<UIButton>();
//当前个btn被点击的时候,需要执行一些事件,比如walk();
EventDelegate walk = new EventDelegate(this,"walk");
btn.onClick.Add(walk);
} void walk()
{ }

2,从GameObject上获取组件

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

      ServerProperty serverProperty = go.GetComponent<ServerProperty>();
serverProperty.Name = name;
serverProperty.ip = ip;
serverProperty.count = count;

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

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

  

   public string Name {
get { return serverName; }
set {
serverName = value;
transform.Find("ServerNameLabel").GetComponent<UILabel>().text = serverName;
} }

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

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

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

  1,某个子组件被按下

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

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

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

  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

unity3d学习重点记录的更多相关文章

  1. Unity3d学习笔记记录

    1.发布到 ipad字体显示不出来,改变Position位置的Z轴为-1 2.发布打包有问题,记得用户权限有没有设置 3.ipad4分辨率:2048*1536 4.调整界面大小,尽量调整底下子对象位置 ...

  2. Vue.js 2.0 学习重点记录

      Vue.js兼容性 Vue.js.js 不支持 IE8 及其以下版本,因为 Vue.js.js 使用了 IE8 不能模拟的 ECMAScript 5 特性. Vue.js.js 支持所有兼容 EC ...

  3. python课程第二周重点记录

    python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...

  4. Activiti 学习笔记记录(2016-8-31)

    上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

  5. Activiti 学习笔记记录(二)

    上一篇:Activiti 学习笔记记录 导读:对于工作流引擎的使用,我们都知道,需要一个业务事件,比如请假,它会去走一个流程(提交申请->领导审批---(批,不批)---->结束),Act ...

  6. PostgresSQL 学习资料记录处

    PostgresSQL 学习资料记录处  博客:http://francs3.blog.163.com PostgreSQL9.4 中文手册:http://www.postgres.cn/docs/9 ...

  7. 学习重点:1、金典的设计模式在实际中应用2、JVM原理3、jui源代码

    学习重点:1.金典的设计模式在实际中应用 2.JVM原理 3.jui源代码

  8. Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  9. Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

随机推荐

  1. android学习笔记45——android的数据存储和IO

    android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...

  2. oracle desc 表结构

    SQL> desc v$logfile; 名称 是否为空? 类型 ----------------------------------------- -------- ------------- ...

  3. mysql 学习笔记(一)

    查询:show databases; show status; show tables; desc  table-name: 更改root密码:方法一:mysqladmin -uroot -poldp ...

  4. Redis应用案例,查找某个值的范围(转)

    本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就 ...

  5. Linux大文件传输(转)

    我们经常需要在机器之间传输文件.比如备份,复制数据等等.这个是很常见,也是很简单的.用scp或者rsync就能很好的完成任务.但是如果文件很大,需要占用一些传输时间的时候,怎样又快又好地完成任务就很重 ...

  6. Ecshop(二次开发) - 后台添加左侧菜单导航

    1.链接地址:修改 admin\includes\inc_menu.php 文件. $modules['17_syn_data']['view_syn']        =    'synchroni ...

  7. linux下的gedit命令使用方法与技巧

    1.启动:   从菜单启动:应用程序——>附件——>文本编辑器   从命令行执行以下命令: gedit   2.窗口说明:   菜单栏:包含您在 gedit 中处理文件所需的所有命令.   ...

  8. HTTP Get请求URL最大长度

    各浏览器HTTP Get请求URL最大长度并不相同,几类常用浏览器最大长度及超过最大长度后提交情况如下: IE6.0                :url最大长度2083个字符,超过最大长度后无法提 ...

  9. git相关网页

    git.apache2.gerrit安装 1.http://blog.csdn.net/benkaoya/article/details/8680886 2.http://fatalove.iteye ...

  10. lamp.phpstudy.net

    phpStudy phpStudy » PHP教程 » phpStudy for Linux (lnmp+lamp一键安装包) phpStudy for Linux (lnmp+lamp一键安装包) ...