c# - 第三人称射击游戏的光线转换

标签 c# unity-game-engine

我需要从我的玩家角色到相机光线转换的命中对象进行光线转换,但我无法让我的代码工作,它似乎总是偏移。

        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);
    }
}

/image/HzdVU.jpg

我以为Debug.DrawRay(transform.position, playerHit.transform.position, Color.red);应该从我的玩家到摄像机击中点的绿线末端画一条红线,而不是射入地板。

最佳答案

将 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);
    }

}

关于c# - 第三人称射击游戏的光线转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835339/

相关文章:

c# - 将 datagridviewcolumn 绑定(bind)到嵌套类

c# - 在 C# 中使用 xmlnamespacemanager 添加命名空间

c# .Net Core 2.1 授权属性 - 默认声明

javascript - 可以在unity js脚本中使用javascript套接字客户端吗?

c# - Unity 中相机平滑变焦的问题

c# - 如何逐步使用函数

c# - 从 RSACryptoServiceProvider 创建 X509Certificate2 失败,找不到请求的对象

android - Google Play 因不安全的加密模式而拒绝我的应用

c# - 如何创建一个在触发特定事件时不运行的函数

C# 获取设置与不获取设置