我有一个Collider2D列表,里面有很多Collider2D,我想检查一下玩家是否与Unity编辑器添加到列表中的任何一个碰撞器发生了碰撞。
using UnityEngine;
public class PlayerScript : MonoBehaviour
{
private Rigidbody PlayerRB;
public List<Collider2D> GroundCOlliders;
public bool IsGrounded;
private void Start()
{
PlayerRB = GetComponent<Rigidbody2D>();
GroundColliders = new List<Collider2D>();
}
private void Update()
{
if (PlayerRB.IsTouching(GroundColliders))
{
IsGrounded = true;
}
}
}
2条答案
按热度按时间3z6pesqy1#
典型的解决方案是从玩家的脚向下投射一个非常短的射线,看看它是否击中了地面碰撞器之一。考虑添加一个地面标签甚至层来检查,而不是持有地面碰撞器列表。类似于:
编辑:我意识到我的解决方案并没有直接回答你的问题,而是假设我知道你真正想要的是什么,以及如何做得更好。要想更直接地解决你的问题,请查看Physics.OverlapX函数族。
vngu2lb82#
如果你正在检查地面,你可以使用复选框,而对于碰撞者,你可以使用图层蒙版