如何处理“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”中设置的变量的if/else范围问题;如果条件“;(破坏C#中的游戏对象)

在if语句之前声明变量,就像对Spheres一样。