Unity3D SetActive二三事

事情1:BUG— NullReference

在Unity3D的使用中,有时需要将一些模型停用,也就是停止渲染,这样可以达到提高性能的效果,有时也是为了场景需要,SetActive的应用不慎会出BUG,经常遇到的就是NullReference,也就是找不到对象。


BUG原因

1. 无该gameObject

2. 使用GameObject.Find() 名字的索引有误

3. 被操作的GameObject必须保证在场景加载的一开始,其Enable属性是true的(当然Unity没有Enable属性,但是大家可以意会),也就是启用Gameobject的选项一定要打勾.

下面是Demo的代码

using UnityEngine;
using System.Collections;

public class EnableAndDisable : MonoBehaviour {
	GameObject obj;
	GameObject obj2;
	bool e = false;
	// Use this for initialization
	void Start () {
		obj = GameObject.Find ("EnableAndDisable");
	}
	
	// Update is called once per frame
	void Update () {
		if (Input.GetKeyDown(KeyCode.Space))
		{
			obj.SetActive(e);
			e = !e;
			obj2 = GameObject.Find ("EnableAndDisable");
		}
	}
}
如果一开始“EnableAndDisable”这个物体就被停用就会报错,但是如果一开始就被启用,之后obj2在“EnableAndDisable”不管是不是被启用,都可以被赋值。


事情2:SetActive的使用原因

比如一个Plane,正面有素材要渲染,但是一般情况下是背面朝向用户,也就是用户看不到这个Plane,这时候可以把这个Plane提前做SetActive(false),以减小渲染的压力,此方法非常给力!而且有用!

你可能感兴趣的:(Unity3D SetActive二三事)