Unity:如果从下面跳到它,则忽略平台的碰撞。使用 ContactFilter & rigidBody.Cast()
Unity: Ignore collision of a plateform if jump to it from below. Using ContactFilter & rigidBody.Cast()
我可以通过使用 contactFilter2D.SetLayerMask() + rigidBody2D.Cast(Vector2, contactFilter, ...);
但我没有找到避免碰撞的方法,只有当我的玩家试图从平台下方进入平台(垂直跳跃)时。
我很确定我应该使用 contactFilter2D.setNormalAngle() (在指定 minAngle 和 maxAngle 之后)但是无论我的角度大小,我都不能通过扔它。
这就是我初始化 contactFilter2D 的方式。
protected ContactFilter2D cf;
void Start () {
cf.useTriggers = false;
cf.minNormalAngle = 0;
cf.maxNormalAngle = 180;
cf.SetNormalAngle(cf.minNormalAngle, cf.maxNormalAngle);
cf.useNormalAngle = true;
}
void Update () {
}
我用它
count = rb.Cast(move, contactFilter, hitBuffer, distance + shellRadius);
有什么想法吗?如果您需要更多代码,请告诉我。但我认为了解这件事没有用。
unity 实际上有一个现成的组件:它是一个名为 "Platform Effector 2D" 的物理组件,如果您将它拖放到您的平台上,它会立即按照您想要的方式工作,并且它具有可调整的设置调整参数。希望这对您有所帮助!
我可以通过使用 contactFilter2D.SetLayerMask() + rigidBody2D.Cast(Vector2, contactFilter, ...);
但我没有找到避免碰撞的方法,只有当我的玩家试图从平台下方进入平台(垂直跳跃)时。 我很确定我应该使用 contactFilter2D.setNormalAngle() (在指定 minAngle 和 maxAngle 之后)但是无论我的角度大小,我都不能通过扔它。
这就是我初始化 contactFilter2D 的方式。
protected ContactFilter2D cf;
void Start () {
cf.useTriggers = false;
cf.minNormalAngle = 0;
cf.maxNormalAngle = 180;
cf.SetNormalAngle(cf.minNormalAngle, cf.maxNormalAngle);
cf.useNormalAngle = true;
}
void Update () {
}
我用它
count = rb.Cast(move, contactFilter, hitBuffer, distance + shellRadius);
有什么想法吗?如果您需要更多代码,请告诉我。但我认为了解这件事没有用。
unity 实际上有一个现成的组件:它是一个名为 "Platform Effector 2D" 的物理组件,如果您将它拖放到您的平台上,它会立即按照您想要的方式工作,并且它具有可调整的设置调整参数。希望这对您有所帮助!