我使用Unity让我的角色从一个移动的平台上跳下来;无限下降。我面临的问题是,当移动的平台上升时,跳跃是完美的,但当平台下降时,我的角色不能经常跳跃;我可以看到平台是";"振动";有点奇怪。
这是我的代码:
移动平台脚本[NB-刚体2D设置为运动学]
public class Moveground : MonoBehaviour
{
[SerializeField] private Transform posTop, posBot;
private float maxTop = -0.5f;
private float maxBot = -5.0f;
[SerializeField] private float speed;
[SerializeField] private Transform startPos;
private Vector2 nextPos;
private void Start()
{
nextPos = startPos.position;
}
private void FixedUpdate()
{
if (transform.position == posTop.position)
{
nextPos = posBot.position;
}
if (transform.position == posBot.position)
{
nextPos = posTop.position;
}
transform.position = Vector2.MoveTowards(transform.position, nextPos, speed*Time.deltaTime);
}
}
PlayerController.cs(仅跳转部分(
[SerializeField] private LayerMask ground;
private Collider2D coll;
private void Start()
{
coll = GetComponent<Collider2D>();
}
private void Update()
{
InputManager();
}
private void InputManager()
{
if (Input.GetButtonDown("Jump") && coll.IsTouchingLayers(ground)) // Moving Platform's layer is also "ground"
{
Jump();
}
}
private void Jump() {
rb.velocity = new Vector2(rb.velocity.x, jumpforce); // jumpforce is a float number
}
如何解决此问题?我是Unity的新手。
而不是"IsTouchingLayers";在PlayerController类中尝试这样的操作:
public bool IsGrounded()
{
return Physics2D.Raycast(transform.position, Vector3.down, 0.1f, ground);
}
和玩距离的论点,这是0.1f的论点。
如果你的玩家转换不在玩家的底部,你也可以输入这样的东西,而不是0.1f:
coll.bounds.extents.y + 0.1f