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),并在脚本中创建了一个publiccollizer2d
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变量必须是公共的。我想你可能误解了这个变量和实际的碰撞器组件。当我预制时,每个传感器对象都应该能够找到它自己的容器对象。这就是为什么这个解决方案帮不上我的忙。当我对出租车预制件发送垃圾邮件时,每个传感器对象都应该能够