unity3d 不知道为什么使用“this”进行检查

smtd7mpg  于 2022-12-23  发布在  其他
关注(0)|答案(2)|浏览(203)

我创建了一个名为Zombies的数组,其中包含了场景中的所有游戏对象。我还创建了foreach循环来检查Zombies是否附加了ZombieState.cs。我正在阅读这本书,但它没有清楚地解释为什么我们需要zState==this

using UnityEngine;

public class ZombieState : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        GameObject[] Zombies = (GameObject[])GameObject.FindObjectsOfType(typeof(GameObject));
        foreach (GameObject go in Zombies)
        {
            ZombieState zState = go.GetComponent<ZombieState>();
            if (zState == null || zState == this)
            {
                continue;
            }
        }

    }
}
rkttyhzu

rkttyhzu1#

this是一个C#语句,它只引用了“this”类。
在您的示例中,如果您通读代码,您会要求Unity列出ZombieState的所有示例。您从其中调用此语句的类也是ZombieState。因此,实质上代码要求ZombieState的所有示例,当需要对所有示例执行某些操作时,foreach语句,我们希望对所有其他示例执行此操作。

vuktfyat

vuktfyat2#

一般来说,this关键字指的是类的当前示例,通常用于区分同名的示例变量和局部变量。在您的示例中,this指的是附加到当前GameObjectZombieState组件,而zState指的是在for-each循环中迭代的ZombieState组件。
zState == this是一个比较,用于检查当前GameObjectZombieState组件(由this关键字引用)是否与for-each循环中正在迭代的ZombieState组件相同。
如果zState == thistrue,则意味着当前正在迭代的ZombieState组件与当前GameObjectZombieState组件相同。在这种情况下,代码将跳过for-each循环的当前迭代,并继续下一个迭代。

相关问题