2016-09-22 111 views
1

我想在2D遊戲中爲我的角色創建一個動作腳本,但是我無法獲得正確的raycast。我只是想能夠移動我想要的任何方向,直到我進入距物體一定距離內。然後我想讓它停止移動,我做錯了什麼?我的光線廣播全部返回0.Raycast Unity運動腳本

using UnityEngine; 
using System.Collections; 

public class Character : MonoBehaviour 
{ 

    [SerializeField] 
    private float speed; 
    // Use this for initialization 
    void Start() 
    { 

    } 

    // Update is called once per frame 
    void Update() 
    { 
     RaycastHit2D hitUp = Physics2D.Raycast(transform.position, -Vector2.up); 
     RaycastHit2D hitDown = Physics2D.Raycast(transform.position, -Vector2.down); 
     RaycastHit2D hitLeft = Physics2D.Raycast(this.gameObject.transform.position, -Vector2.left, 10.0f); 
     RaycastHit2D hitRight = Physics2D.Raycast(transform.position, -Vector2.right); 

     if (Controller.player == 1) 
     { 
      if (Input.GetKey(KeyCode.A) && hitLeft.distance > 1) 
      { 
       transform.position += Vector3.left * speed * Time.deltaTime; 
      } 
      if (Input.GetKey(KeyCode.D) && hitRight.distance > 1) 
      { 
       transform.position += Vector3.right * speed * Time.deltaTime; 
      } 
      if (Input.GetKey(KeyCode.W) && hitUp.distance > 1) 
      { 
       transform.position += Vector3.up * speed * Time.deltaTime; 
      } 
      if (Input.GetKey(KeyCode.S) && hitDown.distance > 1) 
      { 
       transform.position += Vector3.down * speed * Time.deltaTime; 
      } 
     } 
     else 
     { 
      if (Input.GetKey(KeyCode.J) && hitLeft.distance > 1) 
      { 
       transform.position += Vector3.left * speed * Time.deltaTime; 
      } 
      if (Input.GetKey(KeyCode.L) && hitRight.distance > 1) 
      { 
       transform.position += Vector3.right * speed * Time.deltaTime; 
      } 
      if (Input.GetKey(KeyCode.I) && hitUp.distance > 1) 
      { 
       transform.position += Vector3.up * speed * Time.deltaTime; 
      } 
      if (Input.GetKey(KeyCode.K) && hitDown.distance > 1) 
      { 
       transform.position += Vector3.down * speed * Time.deltaTime; 
      } 
     } 
    } 
} 

回答

0

鑑於我們看不到您的環境,預製等的設置,所以很難調試此示例。

想到的第一個建議是:

  1. 調試RaycastHit2D確定是否命中發生。 Perhap可以在循環中使用print((hit.collider != null))在執行Physics2D.Raycast後在代碼中放置一個斷點,然後在調試模式下進行檢查。
  2. 如果沒有發生,請查看您是否在GameObjects上有碰撞器,您希望返回正面光線播放。