2014-11-10 4 views
0

Raycast를 사용하여 오브젝트를 회전시키고 그 방향으로 이동하려고합니다. 그러나 내 물건이 회전하면 새로운 방향으로 움직이지 않습니다. 대신 움직이는 방향과 똑같은 방향으로 움직입니다. 왜 그것이 방향을 바꾸지 않는지 아는가? 공용 클래스 ControlCar : MonoBehaviour {Unity3D 오브젝트가 회전 할 때 움직이지 않는다

CharacterController controller; 
public int Speed; 
public int Raydir; 
public int RotateSpeed; 
public int FrontRay; 
public int RayDist; 

// Use this for initialization 
void Start() { 
    controller = GetComponent<CharacterController>(); 

    RayDist = 4; 
    FrontRay = 3; 
    RotateSpeed = 10; 
} 

// Update is called once per frame 
void Update() { 
    Move(); 
    HandleRay(); 

} 

void Move(){ 
     transform.position += Vector3.forward * Speed * Time.deltaTime; 

    } 

void HandleRay(){ 
    //Front Ray 
    Vector3 Front = transform.TransformDirection(0,0,1) * FrontRay; 
    if (Physics.Raycast (transform.position, Front, 10)) { 
     Debug.Log ("Front hit!"); 
      } 

    //Front right 
    Vector3 FrontR = transform.TransformDirection(1,0,1) * RayDist; 
    if (Physics.Raycast (transform.position, FrontR, 10)) { 
     Debug.Log ("Right hit!"); 
     transform.Rotate(new Vector3(0,-RotateSpeed * Time.deltaTime,0)); 

    } 

    //Front Left 
    Vector3 FrontL = transform.TransformDirection(-1,0,1) * RayDist; 
    if (Physics.Raycast (transform.position, FrontL, 10)) { 
     Debug.Log ("Left hit!"); 
     transform.Rotate(new Vector3(0,RotateSpeed * Time.deltaTime,0)); 
    } 




    //DebugRay 
    Debug.DrawRay(transform.position, FrontL, Color.green); 
    Debug.DrawRay(transform.position, FrontR, Color.red); 
    Debug.DrawRay(transform.position, Front, Color.blue); 
    } 
} 

내 전체 프로젝트는 여기에서 볼 수 있습니다 : 사전에 https://www.dropbox.com/sh/d7yxhjg5humw3vo/AAD5IfBW8slRw8-AT072DsWea?dl=0

감사합니다!

+0

RotateSpeed ​​및 FrontRay는 무엇으로 설정 되나요? – Formic

+0

FrontRay = 3; \t \t RotateSpeed ​​= 10; –

답변

0

Vector3.forward는 항상 new Vector3 (0, 0, 1)을 반환합니다. 실제로 불행하게도 변환의 회전과 관련이 없습니다.

Vector3.forward는 항상 북쪽이고 Vector3.back은 항상 남쪽이며 Vector3.right는 항상 동쪽이며 Vector3.left는 항상 west이며 Vector3.up은 항상 위로, Vector3.down은 항상 아래로, Vector3.one은 항상 아래쪽에 있습니다. 한 번의 호출로 오른쪽, 위쪽 및 앞으로 나타납니다. Vector3.zero는 본질적으로 new Vector3 (0, 0, 0)입니다.

+1

'transform'도 마찬가지로 로컬 방향을 전역 공간에 연결하는 비슷한 이름의 속성을 가지고 있습니다. – David

+0

transform.position + = transform.forward * Speed ​​* Time.deltaTime; 이제 도움이되었습니다. –

+0

나는 transform.forward 속성에 대해 실제로 알지 못 했으므로 이것은 나에게 뉴스 다. 건배 Aravol. –

0

두 개를 바꿔 봅니다.

void Update() 
    { 
     HandleRay(); 
     Move(); 
    } 

그러면 앞으로 적용 할 때 올바른 방향을 향해야합니다.

관련 문제