C# 从组件gameObject访问容器gameObject

C# 从组件gameObject访问容器gameObject,c#,unity3d,C#,Unity3d,我创建了一个游戏对象,并将其命名为“传感器”。然后我向传感器添加了一个BoxCollider和一个脚本(script\u sensor) 然后我创建了另一个游戏对象,并将其命名为“出租车”。我向taxi添加了一个脚本(script_taxi),并在脚本中创建了一个publiccollizer2d 然后我将传感器GameObject分配给出租车的公共collectedr2d 现在,我想从script\u传感器访问script\u滑行 基本上,如何从script\u传感器(框2)访问script\u

我创建了一个
游戏对象
,并将其命名为“传感器”。然后我向传感器添加了一个
BoxCollider
和一个脚本(script\u sensor)

  • 然后我创建了另一个
    游戏对象
    ,并将其命名为“出租车”。我向taxi添加了一个脚本(script_taxi),并在脚本中创建了一个public
    collizer2d

  • 然后我将传感器
    GameObject
    分配给出租车的公共
    collectedr2d

  • 现在,我想从
    script\u传感器
    访问
    script\u滑行

  • 基本上,如何从
    script\u传感器(框2)访问
    script\u taxi
    (图中框1)


    Ps:当我垃圾邮件出租车预制,每个传感器对象应该能够找到它自己的容器游戏对象(出租车)。

    如果你想从
    script\u传感器
    访问
    script\u出租车
    ,你需要在
    script\u传感器
    中对
    script\u出租车
    进行某种类型的引用。然后您可以使用。您也可以使用的变体,但是这些调用可能会很昂贵

    public class script_sensor : MonoBehavior {
        [SerializeField]
        private GameObject taxi;
    
        private script_taxi taxiScript;
    
        void Start() {
           taxiScript = taxi.GetComponent<script_taxi>();
        }
    
    }
    
    公共类脚本\u传感器:单行为{
    [序列化字段]
    私人游戏对象出租车;
    私人脚本;
    void Start(){
    taxiScript=taxi.GetComponent();
    }
    }
    
    此外,建议遵循以下步骤

    script\u sensor=>sensor

    script\u taxi=>taxi


    公共冲突R2D列;=>[序列化字段]专用冲突R2D列
    如果您想从
    脚本传感器
    访问
    脚本滑行
    ,您需要对
    脚本滑行
    内部的
    脚本滑行
    进行某种类型的引用。然后您可以使用。您也可以使用的变体,但是这些调用可能会很昂贵

    public class script_sensor : MonoBehavior {
        [SerializeField]
        private GameObject taxi;
    
        private script_taxi taxiScript;
    
        void Start() {
           taxiScript = taxi.GetComponent<script_taxi>();
        }
    
    }
    
    公共类脚本\u传感器:单行为{
    [序列化字段]
    私人游戏对象出租车;
    私人脚本;
    void Start(){
    taxiScript=taxi.GetComponent();
    }
    }
    
    此外,建议遵循以下步骤

    script\u sensor=>sensor

    script\u taxi=>taxi

    公共冲突R2D列;=>[序列化字段]专用冲突R2D列

    或使用GameObject.Find()查找出租车游戏对象,如下所示:

        script_taxi taxi;
    
        void Awake() 
        {    
            taxi = GameObject.FindWith("taxi").GetComponent<script_taxi>();
        }
    
    script\u出租车;
    无效唤醒()
    {    
    taxi=GameObject.FindWith(“taxi”).GetComponent();
    }
    
    或使用GameObject.Find()查找出租车游戏对象,如下所示:

        script_taxi taxi;
    
        void Awake() 
        {    
            taxi = GameObject.FindWith("taxi").GetComponent<script_taxi>();
        }
    
    script\u出租车;
    无效唤醒()
    {    
    taxi=GameObject.FindWith(“taxi”).GetComponent();
    }
    
    这里有两件事不对。。。C#命名约定并不完全适用于Unity脚本、材质、着色器等。这些是实际脚本的文件名,而不是代码中的变量。也没有理由使
    col
    可序列化,除非您计划序列化此数据-这似乎不是本文试图实现的目标,也不能序列化R2D。我想您误解了我。请检查我附上的图片。您可以在那里看到,传感器对象已分配到何处等@ryemoss我建议的命名约定适用于他的
    名称,而不一定是文件名。此外,如果您只打算在脚本中使用对象,则无需将该对象公开。这是面向对象设计的核心原则之一。不确定为什么不能序列化冲突R2D,但它对我来说工作得很好。请在OP澄清后编辑答案。@MrAwesome8为了从MonoBehavior继承(因此使用Start()方法),脚本名必须与类名匹配。变量可以是私有的,无需序列化-除非您计划序列化此数据,否则这是一个不必要的步骤,在您尝试保存和加载文件中的数据时,这只会导致碰撞器出现问题。此外,为了通过检查器将传感器的碰撞器分配给滑行,滑行中的碰撞R2D变量必须是公共的。我想你可能把变量和实际的对撞机组件弄错了。这里有两件事不对。。。C#命名约定并不完全适用于Unity脚本、材质、着色器等。这些是实际脚本的文件名,而不是代码中的变量。也没有理由使
    col
    可序列化,除非您计划序列化此数据-这似乎不是本文试图实现的目标,也不能序列化R2D。我想您误解了我。请检查我附上的图片。您可以在那里看到,传感器对象已分配到何处等@ryemoss我建议的命名约定适用于他的
    名称,而不一定是文件名。此外,如果您只打算在脚本中使用对象,则无需将该对象公开。这是面向对象设计的核心原则之一。不确定为什么不能序列化冲突R2D,但它对我来说工作得很好。请在OP澄清后编辑答案。@MrAwesome8为了从MonoBehavior继承(因此使用Start()方法),脚本名必须与类名匹配。变量可以是私有的,无需序列化-除非您计划序列化此数据,否则这是一个不必要的步骤,在您尝试保存和加载文件中的数据时,这只会导致碰撞器出现问题。此外,为了通过检查器将传感器的碰撞器分配给滑行,滑行中的碰撞R2D变量必须是公共的。我想你可能误解了这个变量和实际的碰撞器组件。当我预制时,每个传感器对象都应该能够找到它自己的容器对象。这就是为什么这个解决方案帮不上我的忙。当我对出租车预制件发送垃圾邮件时,每个传感器对象都应该能够