我需要从我的玩家角色到相机光线转换的命中对象进行光线转换,但我无法让我的代码工作,它似乎总是偏移。
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);
}
}
我以为Debug.DrawRay(transform.position, playerHit.transform.position, Color.red);
应该从我的玩家到摄像机击中点的绿线末端画一条红线,而不是射入地板。
最佳答案
将 Debug.DrawRay 更改为 Debug.DrawLine!
Debug.DrawRay 需要一个 Vector3 作为原点和一个 Vector3 作为方向,而不是第二个“目标”位置。
这是我的解决方案!
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);
}
}
关于c# - 第三人称射击游戏的光线转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835339/