所以我有一个带有Rigidbody2d的玩家和一个具有连续碰撞检测和动态体型的箱式对撞机2D。玩家必须跳的盒子是动态的,直到他们的刚体被摧毁以便停止摇晃时,盒子上还有一个对撞机2d,但玩家仍可以穿过它。玩家必须以lerp移动,因为它必须只移动一定距离。我很确定这是问题,但是,我不知道如何解决它。我有多个光线投射,除非玩家对角地落在盒子上,否则效果非常好。任何帮助将非常感激。盐文本
由于
void update(){
if (Input.GetAxis("Horizontal") > 0 && moveRight == true && moveRightTimer <= 0)
{
moveRightTimer = 0.15f;
moveX += moveDistance;
if(gameObject.transform.localScale.x < 0)
{
flipPlayer();
}
}
}
void FixedUpdate()
{
MovePlayer();
}
//Moves the player
void MovePlayer()
{
Vector2 PlayerPos = gameObject.transform.position;
PlayerPos.x = moveX;
GetComponent<Rigidbody2D>().MovePosition(PlayerPos + (Vector2)transform.position * Time.deltaTime);
}
答案 0 :(得分:0)
设置播放器的位置时,请使用Rigidbody2D.MovePosition()
或Rigidbody2D.position
来设置转换的位置,而不是直接设置转化的position
属性。 Rigidbody2D.MovePosition()
会考虑你的刚体上的插值设置,如果你想要使用它的话。
示例:
public Rigidbody2D rigid;
public bool UseMovePosition;
void Awake()
{
rigid = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
if (UseMovePosition)
rigid.MovePosition(transform.position + transform.forward * Time.deltaTime);
else
rigid.position = transform.position + transform.forward * Time.deltaTime;
}
这些将设置位置并遵守可能发生的任何碰撞。