bool isRight = collision.GetComponent<Paddle>().isRight;
我有一个名为Paddle.cs的脚本附加到gameObject Paddle上,Paddle.cs包含一个字段“ bool isRight;”。
这部分代码将检测哪个对象与当前对象发生碰撞。
我听不懂这部分
collision.GetComponent<Paddle>().isRight;
这是我的剧本
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag == "Paddle")
{
bool isRight = collision.GetComponent<Paddle>().isRight;
if (isRight)
{
direction.x *= -1;
}
if (!isRight)
{
direction.x *= -1;
}
}
}
答案 0 :(得分:3)
因为在Unity中都存在:GameObject.GetComponent
和Component.GetComponent
Collider2D
以及MonoBehaviour
继承自Behaviour
,而Component
继承自Internally
{{3}}基本上是一种快捷方式,而afaik的行为完全相同,因此无论您使用什么都没有真正的区别
collision.GetComponent<XY>()
或
collision.gameObject.GetComponent<XY>()
这也是您通常只使用
的原因var someComponent = GetComponent<SomeComponent>();
在您的脚本中,而不必经历
var someComponent = gameObject.GetComponent<SomeComponent>();
通常:由于还有OnCollisionEnter
使用类Collision
只是为了避免混淆,您应该调用参数Collider2D collider
或通常(在文档中)将其命名为{{1 }}。
答案 1 :(得分:0)
我们使用DMGregory作为Component.GetComponent的快捷方式。
它使您可以在脚本所附加的同一GameObject上获取组件,而不必显式引用对象本身。换句话说,简化了代码,
var someComponent = gameObject.GetComponent<SomeComponent>();
到
var someComponent = GetComponent<SomeComponent>();
这两种方法在功能上是相同的。
您可以在GameObject.GetComponent中找到源代码,尽管据我所知,它只是本机(C ++,特定于平台的)代码的包装。具体来说,它正在呼叫GameObjectBindings::GetComponentFromType
。