这可能是一个愚蠢的问题,但在 if 语句中,是否可以检查对象当前是否与另一个对象发生碰撞?
这是我最初想到的(在下面的代码片段中),但由于一些我无法弄清楚的奇怪原因,当对象被平台向上推时,变量 onFloor 有时为假。
void OnCollisionEnter2D(Collision2D c)
{
switch(c.gameObject.tag)
{
case "Platform":
onFloor = true;
break;
default:
break;
}
}
void OnCollisionExit2D(Collision2D c)
{
switch(c.gameObject.tag)
{
case "Platform":
onFloor = false;
break;
default:
break;
}
}
出于这个原因,我问是否有任何方法可以检测所述对象的圆形对撞机在代码中是否与相交对象的盒式对撞机发生碰撞。就像是
if(CircleCollider2D.CollidingObject != null && CircleCollider2D.CollidingObject.tag == "Platform")
{ /*Code I'd like to do here*/ }
现在这只是我的想象力,试图想出一些可行的方法,但你明白了。
所以,我问,我的想象力有什么解决方案吗?
与程序员讨论后,IsTouching 加了下划线并给出了错误:“Collider2D”不包含“IsTouching”的定义,并且找不到接受“Collider2D”类型的第一个参数的扩展方法“IsTouching”(您是否缺少使用指令还是程序集参考?)。
这是精简的代码:
using UnityEngine;
public class Ball : MonoBehaviour
{
Vector2 jumpVelocity;
public Collision2D platform;
// Use this for initialization
void Start()
{
jumpVelocity = new Vector2(0, rigidbody2D.gravityScale * 100);
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space) && collider2D.IsTouching(platform))
{
rigidbody2D.AddForce(jumpVelocity, ForceMode2D.Force);
}
}
}
请注意,即使将 collider2D 更改为 Collision2D 变量并采用该 variable.collider.IsTouching 也会导致相同的错误。