2015-04-23 5 views
3

Мне нужно сделать raycast от персонажа моего персонажа, к объекту хита моей рации, но я не могу заставить свой код работать, он всегда кажется смещенным.Raycasting для шутера от третьего лица

 void Update() { 

    RaycastHit hit; 
    Ray playerAim = playerCamera.GetComponent <Camera>().ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2)); 
    Physics.Raycast(playerAim, out hit); 
    Debug.DrawRay(playerAim.origin, playerAim.direction * hit.distance, Color.green); 

    if (Physics.Raycast(playerAim, out hit)){ 
     // something was hit 
     RaycastHit playerHit; 
     Physics.Raycast(transform.position, hit.transform.position, out playerHit); 
     Debug.DrawRay(transform.position, playerHit.transform.position, Color.red); 

     Debug.Log ("Distance from camera: "+ hit.distance); 
     Debug.Log ("Distance from player: "+ playerHit.distance); 
    } 
} 

http://i.stack.imgur.com/HzdVU.jpg

Я думал Debug.DrawRay(transform.position, playerHit.transform.position, Color.red); должен нарисовать красную линию от своего игрока до конца зеленой линии камеры хит точки, вместо этого он стреляет мимо в пол.

ответ

3

Изменить Debug.DrawRay на Debug.DrawLine!

Debug.DrawRay требует Vector3 как начало координат, а Vector3 - как направление, а не второе «целевое» положение.

Это мое решение!

enter image description here

void FixedUpdate() { 

    RaycastHit cameraHit; 
    Ray cameraAim = playerCamera.GetComponent <Camera>().ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2)); 
    Physics.Raycast(cameraAim, out cameraHit, 100f); 
    Debug.DrawLine(cameraAim.origin, cameraHit.point, Color.green); 
    Vector3 cameraHitPoint = cameraHit.point; 
    float cameraDistance = cameraHit.distance; 

    if (Physics.Raycast(cameraAim, out cameraHit)){ 
     // something was hit 
     RaycastHit playerHit; 
     Physics.Raycast(transform.position + new Vector3 (0f, 1.8f, 0f), cameraHitPoint-transform.position - new Vector3 (0f, 1.8f, 0f), out playerHit, 100f); 
     Debug.DrawRay(transform.position + new Vector3 (0f, 1.8f, 0f), cameraHitPoint-transform.position - new Vector3 (0f, 1.8f, 0f), Color.red); 

     float playerDistance = playerHit.distance; 
     Debug.Log ("Distance from player: "+ playerDistance); 
     Debug.Log ("Distance from camera: "+ cameraDistance); 
    } 

} 
Смежные вопросы