【发布时间】:2020-12-11 18:30:24
【问题描述】:
我正在开发一款游戏,结果到了我脑子里什么都没有的地步。想要经常通过对撞机引用对象。我不知道怎么做所以请帮忙。
提前致谢
【问题讨论】:
-
不幸的是,目前还不清楚您到底想要达到什么目标以及您在哪里挣扎。您能否更深入地了解您的代码的外观以及问题出在哪里/您到底在问什么?也请看How do I ask a good question?
标签: unity3d
我正在开发一款游戏,结果到了我脑子里什么都没有的地步。想要经常通过对撞机引用对象。我不知道怎么做所以请帮忙。
提前致谢
【问题讨论】:
标签: unity3d
使用脚本 As 和脚本 2As 以及对撞机 Ac 获取对象 A 带有脚本 Bs 和对撞机 Ac 的对象 B
它们可能是您希望在这里实现的 3 个不同的目标:
从脚本作为参考脚本 B: 首先,您需要从脚本 As 中引用 Bs 在 (B) 上的游戏对象 在脚本的最顶部正如您要添加的那样:
public GameObject objectB;
稍后在您的代码中,当您想引用 objectB 上的脚本时,您可以这样做:
int value = objectB.GetComponent<Bs>().score;
其中 score 是 Bs 中的一个变量
来自 As 的参考脚本 2As: 在这种情况下,我们已经在同一个游戏对象上,所以我们可以简单地做
int value = gameObject.GetComponent<2As>().Score;
其中 Score 是 Script 2As 中的整数 我们可以在这里只说 gameObject.GetComponent 而不必引用另一个对象的原因是因为带有小写 g 的 gameObject 指的是脚本所在的对象。所以我们只是说“在这个游戏对象上获取其他脚本”
最后(我认为您可能正在尝试这样做?) 获取对撞机并获取此对撞机上的游戏对象,然后获取该游戏对象上的脚本:
public Collider coll;
int val = coll.GameObject.GetComponent<script>().value;|
希望对您有所帮助,我并没有真正理解您的问题,所以如果这不能回答您的问题,请告诉我:)
如果您有任何其他问题,也可以加入我的 discord:discord.io/gamedev
【讨论】:
我们确实需要更多关于您想要完成的任务的信息。您是否想知道最近碰撞的物体是什么?试图进行光线投射?根据你想用它做什么,你可能需要在游戏对象上引用不同的组件。等等
但这里有一个例子:
//Component on a gameobject with a collider attached.
public class RefByCollision : MonoBehaviour
{
[SerializeField] //makes it show in inspector
private GameObject lastCollisionGO;
//Called everytime this gameobject collides with another that has a collider (non trigger)
private void OnCollisionEnter(Collision other)
{
lastCollisionGO = other.gameObject; //replaces reference with the newly collided object.
}
}
游戏对象上附加了碰撞器的此组件将在每次对象与另一个对象碰撞时替换存储在 lastCollisionGO 中的引用。
注意:如果您尝试在 lastCollisionGO 与某物碰撞之前查询它的值,它将为空并给您一个空引用异常。
【讨论】: