【发布时间】:2019-06-13 15:46:34
【问题描述】:
我在学习 Unity 基础知识方面做得很好,但想确定我对组件和拥有它们的对象之间关系的理解。在我一直在观看的教程中,在处理代码中提取的对象时,通常会使用或传递 Transform 组件。例如:
void Explode ()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius);
foreach (Collider collider in colliders)
{
if (collider.tag == "Enemy")
{
Damage(collider.transform);
}
}
}
它通过它找到的对撞机上的变换调用“Damage”:
void Damage (Transform enemy)
{
Enemy e = enemy.GetComponent<Enemy>();
if (e != null)
{
e.TakeDamage(damage);
}
}
看看这个,很明显它正在拉取一个在所有游戏对象上找到的组件,然后使用“GetComponent”按名称拉取另一个组件实例,因为“Enemy”组件不会有自己的方法。为什么不直接传递 collider.gameObject 呢?我试过这个(在改变伤害以期望一个游戏对象之后),它工作得很好。
这对我来说似乎更直观,但我看到的所有教程都使用转换组件。有谁知道为什么会这样?这将帮助我加深对 Unity 如何构建其代码的理解。
【问题讨论】:
-
可能你看过的所有教程都是从一个祖先那里复制过来的
-
就个人而言,我实际上会尝试使用
GetComponent<Enemy>()拳头,而不是调用传递对Enemy的引用的方法;) -
这对我来说很有意义 derHugo。还有 Shingo,我一直在看 Brackeys 的教程和 Unity 本身的一些教程。这似乎是一种正在发展的模式,所以我想问问社区。span>