2017-06-23 38 views
1

对不起,如果标题混乱。基本上,我想要做的是确保玩家接地(这样他们可以再次跳跃),问题是在我的游戏中会出现玩家可以着陆的凸形。Unity2D尽量以凸起形状跳跃

我现在这样做的方式是使用光线投射,但由于单个光线投射只能来自中心的某个位置,所以我这样做是为了让光线投射沿着球员的底部进行(取而代之)如果一半以上的身体离开平台,玩家将无法跳跃)。

然而沿着底部的光线投射使得它如此,如果我试图在像斜坡这样的形状上跳跃时,它会使我变得难以置信的高,这是我不想要的。

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

代码:

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

会发生什么事,如果你尝试用Input.GetKeyDown(KeyCode.Space)

除非游戏设计它只要你按下空间就会跳跃,这可能是你跳得更高的原因。

如果光线投射的解决方案仍是靠不住的,如果玩家使用的地板Collider并告诉你,当你与它相撞的标志接地检测的另一种方式(可以使用OnCollisionEnter/Exit设置该标志或OnTriggerEnter/Exit