unity3d游戏菜单或结算界面(游戏对象)的显示控制

在游戏中有许多界面需要来回切换,如游戏的设置菜单界面、背包界面、部分游戏的结算界面等等,这些界面一直存在于游戏中,需要的时候只是将其显示出来,不需要的时候将其隐藏起来,从而实现对其的显示控制,那么如何实现这一操作?


Unity3d中实现的思路是:

第一种思路:首先将制作好菜单UI界面禁止,在需要的时候再激活,从而达到控制游戏菜单或结算界面的显示。


第二种思路:让对象一直保持激活状态,先将制作好菜单UI界面移到屏幕外,需要的时候再将制作好菜单UI界面移回屏幕内。


Unity3d的具体实现方法:

第一种思路

利用:GameObject.SetActive() 设置激活

显示隐藏可以用:

gameobjectname.SetActive(false\true);//需要用public GameObject gameobjectname引用;

或者

GameObject.Find("GameObjectname").SetActive(false\true);


但是这里会有两个BUG:

1、用find()方法寻找游戏对象,然后在Unity3d里直接停用此游戏对象,或者在代码使用SetActive()方法隐藏游戏对象,再用find()方法寻找游戏对象时候会报错找不到对象;

2、用public GameObject引用方法,在Unity3d里直接停用此游戏对象,SetActive()方法将无作用;


解决方法:

使用public GameObject引用方法,引用需要禁用\激活游戏对象,然后用代码控制游戏对象的禁用或者激活;如果游戏对象默认需要禁用状态,则需在start()方法中使用SetActive()方法禁用此游戏对象,然后在后面的代码中就可以正常控制游戏对象的禁用或者激活;


注意:

SetActive()方法可以将一个显示\隐藏的游戏对象设置为隐藏\显示,但是一开始就停用此游戏对象,那么SetActive()方法将无作用,游戏就会报错“object reference not set to an instance of an object”,意思是没有将对象引用到实例。


对于游戏性能优化而言,在使用NGUI时应避免频繁调用GameObject.SetActive()方法

原因:每次调用GameObject.SetActive()方法都会有消耗,应减少调用该API的频率,这类操作对CPU开销很大,而且会触发大量GC;


第二种思路:

利用:Transform.position 位置

显示:通过Transform.position设置游戏对象的坐标,将游戏对象的坐标设置在屏幕内的一个坐标点;

隐藏:通过Transform.position设置游戏对象的坐标,将游戏对象的坐标设置在屏幕外的一个坐标点;

你可能感兴趣的:(unity3d游戏菜单或结算界面(游戏对象)的显示控制)