很抱歉,标题令人困惑。基本上,我要做的是确保玩家接地(因此他们可以再次跳跃),问题在于我的游戏中会出现玩家可以登陆的凸形状。
我现在这样做的方法是使用光线投影,但由于单个光线投射只能来自像中心这样的地方,所以我做了这样,因此光线投射沿着播放器的底部而去(这消除了问题)如果超过一半的身体离开平台,则玩家无法跳跃。
然而,沿着底部的光线投射使得如果我试图在像斜坡一样的形状上跳跃,它会让我变得非常高,这是我不想要的。
任何人都可以帮我解决这个问题吗?
代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterMovement : MonoBehaviour {
public Rigidbody2D rBody;
[Range(1, 10)]
public int Speed;
private float lastDistance;
public bool isGrounded = true;
private LayerMask environment;
void Start () {
environment = LayerMask.GetMask("Environment");
}
void FixedUpdate() {
// Check if the user is attempting to jump
if (Input.GetKey(KeyCode.A)) {
rBody.velocity = new Vector2(-Speed, rBody.velocity.y);
}
if (Input.GetKey(KeyCode.D)) {
rBody.velocity = new Vector2(Speed, rBody.velocity.y);
}
if (Input.GetKey(KeyCode.Space)) {
RaycastHit2D hit2D = Physics2D.Raycast(rBody.position+new Vector2(0,-1.5f), Vector2.right,1f,environment);
if (hit2D) {
if (hit2D.distance < lastDistance) {
lastDistance = hit2D.distance;
}
else {
lastDistance = 100f;
rBody.AddForce(new Vector2(0, 10), ForceMode2D.Impulse);
}
}
}
}
}
答案 0 :(得分:1)
如果您尝试Input.GetKeyDown(KeyCode.Space)
会怎样?
除非游戏设计它只要你按空间就能继续跳跃,否则这可能是你跳得太高的原因。
如果Raycast解决方案仍然不稳定,另一种检测播放器是否接地的方法是使用Collider
作为发言权,并使用一个标志告诉你何时发生碰撞(你可以设置这个标志)使用OnCollisionEnter/Exit
或OnTriggerEnter/Exit
)