Unity2D以凸起的形状跳跃为可能的地面

时间:2017-06-23 23:33:41

标签: c# unity3d

很抱歉,标题令人困惑。基本上,我要做的是确保玩家接地(因此他们可以再次跳跃),问题在于我的游戏中会出现玩家可以登陆的凸形状。

我现在这样做的方法是使用光线投影,但由于单个光线投射只能来自像中心这样的地方,所以我做了这样,因此光线投射沿着播放器的底部而去(这消除了问题)如果超过一半的身体离开平台,则玩家无法跳跃。

然而,沿着底部的光线投射使得如果我试图在像斜坡一样的形状上跳跃,它会让我变得非常高,这是我不想要的。

任何人都可以帮我解决这个问题吗?

代码:

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);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果您尝试Input.GetKeyDown(KeyCode.Space)会怎样?

除非游戏设计它只要你按空间就能继续跳跃,否则这可能是你跳得太高的原因。

如果Raycast解决方案仍然不稳定,另一种检测播放器是否接地的方法是使用Collider作为发言权,并使用一个标志告诉你何时发生碰撞(你可以设置这个标志)使用OnCollisionEnter/ExitOnTriggerEnter/Exit