当我设置球的speed
= 10 OnTriggerEnter2D
来测试地板上的击球时工作正常,但是当我设置speed
更高(20)时,{{1没有工作,球通过OnTriggerEnter2D
我的代码:
floor
void Start () {
rigiBody = GetComponent<Rigidbody2D>();
ballLayer = 1 << LayerMask.NameToLayer("Ball");
}
void OnTriggerEnter2D(Collider2D other) {
if (other.CompareTag(Constants.FLOOR_TAG))
{
Debug.Log("FLOOR_TAG");
if (HitFloor != null)
HitFloor(this);
}
}
void FixedUpdate() {
Vector2 tempVect = Direction;
tempVect = tempVect.normalized * Speed * Time.deltaTime;
Vector2 newPos = rigiBody.position + tempVect;
rigiBody.MovePosition(newPos);
timer += Time.deltaTime;
RaycastHit2D hit = Physics2D.Raycast(newPos, Direction, Speed * Time.deltaTime * 1.2f, ~(ballLayer));
if (!hit)
return;
...
以下的检查员
这段代码有什么问题?
ps我使用的是Unity 2017.1.1f1 Personal
答案 0 :(得分:1)
你必须改变&#34;碰撞检测&#34;刚体的性质。应该是&#34;连续&#34;不是&#34;离散&#34;。如果选择离散值,则告诉刚体在离散时间间隔内检查碰撞。如果你高速移动,刚体可能会错过碰撞。
答案 1 :(得分:0)
将Rigidbody2D组件中的碰撞检测模式设置为“连续”。 Documentation
也许正在改变
RaycastHit2D hit = Physics2D.Raycast(newPos, Direction, Speed * Time.deltaTime * 1.2f, ~(ballLayer));
到
RaycastHit2D hit = Physics2D.Raycast(newPos, Direction, Speed * 1.2f, ~(ballLayer));
也将解决问题。
答案 2 :(得分:0)
为什么要从newPosition投射Ray?伊莫。您应该从当前位置投射它。
答案 3 :(得分:0)
解决我的问题非常接近
添加并更改了几行
[RequireComponent(typeof(Rigidbody2D))]
Ball
RigiBody
替换为属性现在一切运转良好,球不会高速摔倒在地板上
更改后的代码如下所示
[RequireComponent(typeof(Rigidbody2D))] // Added this code
public class Ball : MonoBehaviour {
private Rigidbody2D _rigiBody;
public Rigidbody2D RigidBody { //And this property
get {
if (_rigiBody == null)
_rigiBody = GetComponent<Rigidbody2D>();
return _rigiBody;
}
}