NGUI-实例化问题
2015-08-02 18:13
471 查看
大家好,我是蜀云泉,我的博客存在的不足之处,希望大家包涵。 我在研究NGUI的时候发现一个问题。在NGUI下实例化物体,其坐标总是位于原点,也就是UIRoot的(0,0,0)处,困惑了好几天我才发现NGUI下实例化物体分两种情况。
第一种情况:NGUI下实例化GameObject物体。
这种情况下实例化物体是没有任何问题的,代码如下:
public Transform target;//定义要实例化精灵的位置处的父物体 public Transform flag;//定义要实例化的sprite void Update() { Transform MJ = (Transform)Instantiate(flag, target.position, Quaternion.identity);//实例化sprite,在target的位置 }
效果图:
第二种情况:NGUI下实例化Sprite精灵。
这种情况是值得一说的,因为这是NGUI的一个特有的情况。首先我们来明确一个概念,NGUI下的东西是不是都在UIRoot下面?答案是一定的。那么现在问题就来了,你在游戏中实例化的物体是sprite,这个sprite是不属于你现在的UIRoot的,所以NGUI会自动的把你实例化的sprite转移到现有的UIRoot下面(强制性吗?呵呵),这个过程就会默认的把你实例化的sprite的位置归为(0,0,0),所以无论你怎么设置其Position都没有用。 解决办法:手动的为sprite设置父物体。这个父物体是现有的UIRoot下的一个精灵,随便是谁,看你要求了。接下来上代码:
public Transform target;//定义要实例化精灵的位置处的父物体 public Transform flag;//定义要实例化的sprite void Update() { Transform MJ = (Transform)Instantiate(flag.transform, target.position, Quaternion.identity);//实例化sprite,在target的位置 MJ.parent = target; //手动给MJ指定父物体,很重要 MJ.localScale = Vector3.one;//实例化的sprite的大小为(1,1,1)很重要 }
好了,现在来看一下效果: ![第二种情况效果图](https://img-blog.csdn.net/20150802182157169)
总结:
感觉学习就是学习原理,只要你懂得原理了,问题也就不可怕了,它再花哨其本质还是一样的,这个问题困扰了我好几天,今天终于有时间研究了一下,懂了之后就写了这篇博客,希望可以帮助到一些学unity的朋友,再见。
相关文章推荐
- unity实现多点触控代码
- 在Unity中实现动画的正反播放代码
- unity实现摄像头跟随
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- Unity3D上路_03-塔防游戏
- Unity3D上路_04-基础资源介绍
- Unity3D上路_05-网络相关
- [软件资讯]Unity已支持将3D游戏导出成Flash
- Unity 武器拖尾效果
- unity常见问题之20题
- Unity3D动画存储插件
- unity 赛车相机跟随物体移动
- (Endless)Scroll View(画卷滚动视图)
- Unity 预编译宏
- VS2013中 命名空间“UnityEngine”中不存在类型或命名空间名称“UI”。是否缺少程序集引用?
- Unity3D占用内存太大的解决方法
- 【Unity】安卓项目使用带有资源Jar包SDK的打包方法
- 关于NGUI中UITexture贴图自定义的shader文件在UISrollView中不报错的解决方案
- NGUI研究院之三种方式监听NGUI的事件方法