2016-09-22 74 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上有碰撞器,您希望返回正面光线播放。