2016-09-22 4 views
1

2d 유니티 게임에서 캐릭터의 동작 스크립트를 만들려고하는데 레이크 캐스트를 제대로 가져올 수 없습니다. 나는 단지 내가 어떤 방향으로 움직일 수 있기를 바란다. 내가 어떤 방향으로 움직일 때까지. 그럼 내가 움직이는 걸 막으려 고, 내가 뭘 잘못 했니? 내 레이 캐스트가 모두 0으로 돌아갑니다.Raycast Unity Movement Script

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가 결정합니다. 언제든지 print((hit.collider != null))을 루프에 사용하고 또는 코드를 작성한 후 Physics2D.Raycast 코드에 중단 점을 넣은 다음 디버그 모드로 확인하십시오.
  2. 발생하지 않는 경우 긍정적 인 레이 캐스트를 반환 할 GameObjects에 충돌자가 있는지 확인하십시오.