C# 在访问MonoBehavior派生类所附加的gameObject时,我应该使用“this”还是“gameObject”?

C# 在访问MonoBehavior派生类所附加的gameObject时,我应该使用“this”还是“gameObject”?,c#,unity3d,C#,Unity3d,我正在从零开始学习Unity3D。我发现我们可以访问一个游戏对象,其中一个脚本声明了一个派生的MonoBehavior类,如下所示 通过这个 通过游戏对象 通过具有[SerializedField]属性的专用字段。 琐碎代码 问题 在这三个选项中,我只想知道什么时候我们需要选择这个,而不是gameObject,以及相反的选项?它们是不同的东西 当您使用它时,您引用的是关键字,在本例中,它是关于您正在编写的单一行为的 当您使用gameObject时,您谈论的是包含您正在编写的行为的gameObje

我正在从零开始学习Unity3D。我发现我们可以访问一个游戏对象,其中一个脚本声明了一个派生的MonoBehavior类,如下所示

通过这个 通过游戏对象 通过具有[SerializedField]属性的专用字段。 琐碎代码 问题
在这三个选项中,我只想知道什么时候我们需要选择这个,而不是gameObject,以及相反的选项?

它们是不同的东西

当您使用它时,您引用的是关键字,在本例中,它是关于您正在编写的单一行为的

当您使用gameObject时,您谈论的是包含您正在编写的行为的gameObject。此游戏对象可以包含其他单一行为


例如,如果你的MonoBehavior有一个属性,你可以用这个来引用它。如果游戏对象有一个物理组件,你可以使用GetComponent来访问它。

你不应该在更新中调用GetComponent。这对性能非常不利。你应该缓存刚体。这指的是这个类的实例,你用gameObject写这个类,你指的是你的组件所连接的gameObject。[SerializedField]允许您向inspector unity editor gui公开私有字段。这三件事从根本上说是正确的different@yes,那么问题是:由于this和gameObject都可以调用GetComponent,所以我应该使用哪个来访问组件?this.GetComponent与this.gameObject.GetComponent相同。相同,例如this.transfrom与this.gameObject.transform的操作相同。只是语法糖。您只需要指定游戏对象,如果它不是组件所连接的对象,或者您也可以在连接到其他游戏对象的组件上调用它,这意味着其他游戏对象。GetComponent@yes:我仍然不理解您的陈述,您只需要指定gameObject,如果它不是组件所连接的对象,或者您也可以在连接到其他gameObject的组件上调用它,这意味着otherGameobject.GetComponent。依我看,脚本总是附加到游戏对象上。如果我通过this或this.gameObject调用transform或GetComponent,很明显我指的是属于脚本所附加到的游戏对象的transform或GetComponent。所以我还是不明白什么时候我必须明确提到gameObject?
using UnityEngine;

public class Ball : MonoBehaviour
{

    [SerializeField]
    private GameObject ball;

    void Update()
    {
        Vector3 force = new Vector3
        {
            x = 5 * Input.GetAxis("Horizontal"),
            y = 0,
            z = 5 * Input.GetAxis("Vertical")
        };

        //gameObject.GetComponent<Rigidbody>().AddForce(force);
        //this.GetComponent<Rigidbody>().AddForce(force);
        ball.GetComponent<Rigidbody>().AddForce(force);
    }
}