如何处理“if”中设置的变量的if/else范围问题;如果条件“;(破坏C#中的游戏对象)
本文关键字:if 如果 问题 条件 破坏 范围 对象 游戏 变量 处理 设置 | 更新日期: 2023-09-27 18:19:53
我正在使用Unity,并制作一个程序,一旦单击对象,就会显示球体,然后我想在再次单击时删除球体。
问题是,在初始运行时,没有定义球体,因为只有在未单击对象(!isSelected
)的情况下才会创建球体。我将它们创建为GameObjects的数组,但当我输入else条件时,我收到错误NullReferenceException:对象引用未设置为对象Cube.OnMouseDown()的实例我想这是因为我一开始就设置了GameObject[] Spheres = null
。我应该如何初始化这个变量,这样我就不会收到这个错误?
一般来说,使用在if语句中定义并在else语句中修改的变量的最佳实践是什么?
using UnityEngine;
using System.Collections;
using System.Linq;
public class Cube : MonoBehaviour {
bool isSelected = false;
void OnMouseDown() {
Renderer rend = GetComponent<Renderer>();
GameObject[] Spheres = null;
if (!isSelected) {
isSelected = true;
rend.material.color = Color.blue; //#588c7e
Vector3[] vertices = GetComponent<MeshFilter>().mesh.vertices;
Vector3[] verts = removeDuplicates(vertices);
Spheres = drawSpheres(verts);
} else {
rend.material.color = Color.white;
print("destroy verts");
for (int i=0; i<Spheres.Length; i++) {
Destroy(Spheres[i]);
}
isSelected = false;
}
}
GameObject[] drawSpheres(Vector3[] verts) {
GameObject[] Spheres = new GameObject[verts.Length];
for (int i = 0; i < verts.Length; i++) {
Spheres[i] = GameObject.CreatePrimitive(PrimitiveType.Sphere);
Spheres[i].transform.position = verts[i];
Spheres[i].transform.localScale -= new Vector3(0.8F, 0.8F, 0.8F);
Spheres[i].AddComponent<VertClicked>();
}
return Spheres;
}
}
注意:我从这个类中删除了removeDuplicates()、Start()和Update()函数,因为我认为它们对这个问题没有贡献。
在if语句之前声明变量,就像对Spheres一样。