这就像是马里奥游戏。玩家跳来跳去,必须收集一些物品。
问题是我的光线没有与项目框碰撞器碰撞。
我需要射线知道,所以我可以销毁玩家碰撞的正确物品。
void OnCollisionEnter2D(Collision2D colisor)
{
if((colisor.gameObject.name == "floor" || colisor.gameObject.name == "floor2" || colisor.gameObject.name == "floor3"))
{
anim.SetBool("jump", false);
anim.SetFloat("speed", 0);
}
if (colisor.gameObject.name == "space(Clone)")
{
RaycastHit hit;
Ray ray = new Ray(player.position, transform.right);
Debug.Log("hit1");
if (Physics.Raycast(ray, out hit))
{
BoxCollider bc2d = hit.collider as BoxCollider;
Debug.Log("hit2");
if (bc2d != null)
{
Destroy(bc2d.gameObject);
}
}
}
}
答案 0 :(得分:2)
您正在混合3d和2d物理; Physics
只会查找3d对象,因此您应该改用Physics2D
。如果投射开始于目标内部,则此射线投射仍可能失败,因为表面法线指向错误的方向。
还请注意,由于您已经拥有Collision2D
,因此您只需抓住otherCollider
,就不必首先进行射线广播。
答案 1 :(得分:0)
Physics.Raycast
不适用于2D对象。相反,您需要使用Physics2D.Raycast
或Graphic Raycaster
。
Raycast2D-https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html
图形Raycaster-https://docs.unity3d.com/eng/current/Manual/script-GraphicRaycaster.html