【问题标题】:Movement script relating to camera rotation [duplicate]与相机旋转有关的运动脚本[重复]
【发布时间】:2021-11-02 18:31:51
【问题描述】:

我对统一比较陌生,我有一个脚本可以与我的刚体一起工作,该刚体连接到一个球体对象。问题是球体不会朝我的电影摄影机所面对的方向移动,它当然只会朝最初设置的方向移动。如何让我的球体的 WASD 控件在相机所面对的方向上起作用?

这是我的动作脚本:

public class BallControl2 : MonoBehaviour {
    public float speed = 2;
    public Rigidbody rb;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float movementHorizontal = Input.GetAxis("Horizontal");
        float movementVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(movementHorizontal, 0.0f, movementVertical).normalized;

        rb.AddForce(movement * speed);
        
    } }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    Vector3 位置和方向是指角色的世界位置和方向,要沿相机方向移动角色,您需要参考相机的变换并将水平运动与 camTranform.right 相乘,将垂直运动与camTransform.forward

    Vector3 movement = * camT.right * movementH + camT.forward * movementV;

    ~moveH 是你的水平运动变量,camT 是你的相机的变换。~

    【讨论】:

    • 这听起来很愚蠢,但是如何引用我的相机的变换?
    • 您的意思是正确的,但是当您编写它时,它甚至无法编译;)...您可能提到了Vector3 movement = * camT.right * movementH + camT.forward * movementV;
    • @BillMurray yourCamera.transform.forward 等?
    • 这很好用——我用 Vector3 motion = Camera.main.transform.forward * motionHorizo​​ntal + Camera.main.transform.right * movementVertical; 替换了原来的 vector3 行;
    • 感谢您的帮助!
    猜你喜欢
    • 2022-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多