Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
转向的问题
丶CK发起了问答2017-06-24
6
回复
511
浏览

 void SelfAndTargetRt_M()
    {
        if (Input.GetMouseButtonDown(1))
        {
            isRt = true;
        }
        if (Input.GetMouseButtonUp(1))
        {
            isRt = false;
        }
        if (Input.GetMouseButtonDown(0))
        {
            isLeftRt = true;
        }
        if (Input.GetMouseButtonUp(0))
        {
            isLeftRt = false;
        }
        if (isRt)
        {
            x += Input.GetAxis("Mouse X") * rotationSpeed;
            y -= Input.GetAxis("Mouse Y") * rotationSpeed;

            y = Mathf.Clamp(y, minAngleLimit, maxAngleLimit);
            transform.rotation = Quaternion.Euler(y, x, 0);

            player.transform.rotation = Quaternion.Euler(0, x, 0);
        }
        if (isLeftRt)
        {
            x += Input.GetAxis("Mouse X") * rotationSpeed;
            y -= Input.GetAxis("Mouse Y") * rotationSpeed;

            y = Mathf.Clamp(y, minAngleLimit, maxAngleLimit);
            transform.rotation = Quaternion.Euler(y, x, 0);
        }
        distancePos.y -= Input.GetAxis("Mouse ScrollWheel") * distanceSpeed;
        distancePos.y = Mathf.Clamp(distancePos.y, minTargetDis, maxTargetDis);
        transform.position = transform.rotation * new Vector3(0.0f, 0.0f, -distancePos.y) + player.position;
    }

老师;

上面脚本是挂载在 Camera上的 转向 和跟随人物的 实现部分!  

下面部分是挂载到 人物身上的但是  想实现 按键盘上的 wsad 键的时候 人物的面向是正常了对应的wsad  但是前方向 不是对应 wsad 的方向 想让 前方向 对应 wsad 键方向 该怎么改动老师!

       #region
        float z = Input.GetAxis("Horizontal");
        float x = Input.GetAxis("Vertical");
        rigidbody.transform.position += new Vector3(z * speed * Time.deltaTime, 0, x * speed * Time.deltaTime);

        if (Mathf.Abs(z) > 0.05f || Mathf.Abs(x) > 0.05f)
        {
            isMove = true;
            rigidbody.transform.rotation = Quaternion.LookRotation(new Vector3(z, 0, x));
        }
        #endregion

所有回复
  • siki 2017-06-25

    首先是左右方向,使用camera的左右方向(cameraTrans通过自己的方式得到,这里指的是camera身上的transform组件)

    cameraTrans.right

    然后是前后方向,前后方向跟camera就不对应了

    vector3 forward  = Vector.ProjectOnPlane(cameraTrans.forward,Vector3.up);

     rigidbody.transform.position +=(cameraTrans.right*z+forward*x)*Time.deltaTime

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 丶CK 2017-06-27

    老师,我琢磨好久,还是有问题  刚开始 走动几次 按键时  方向都是默认面向 最开始的方向 前后左右按键转动是正常的  但是 在转动视角后  还是面向的最开始的前后 左右 不是当前视角的前后左右

    最开始的视角

    最开始视角按键转动正常 camera  无旋转

     摄像机转动后人物还是不能让前方向对应 当前视角的 wsad上  该怎么改动呢 折腾一天写不出来 对旋转太模糊,更加迷糊了 

     float z = Input.GetAxis("Horizontal");
            float x = Input.GetAxis("Vertical");
            Vector3 forward = Vector3.ProjectOnPlane(camera.forward, Vector3.up);
            rigidbody.transform.position += (camera.right * z + forward * x) * Time.deltaTime * speed;

            if (Mathf.Abs(z) > 0.05f || Mathf.Abs(x) > 0.05f)
            {
                transform.rotation = Quaternion.LookRotation(new Vector3(z, 0, -x));
                PlayerState = PlayerStatus.KeyMove;
            }
            else
            {
                PlayerState = PlayerStatus.Idle;
            }

    错误处就是 他一直是面向的 最开始游戏的视角的前后左右方向

    在该怎么改动呢  不会了

    • siki 2017-06-27

      transform.rotation = Quaternion.LookRotation((camera.right * z + forward * x)); 运动和朝向都按照,相机的视野来控制,而不是直接去的按键来控制朝向

      (0) 回复
    • 丶CK 2017-06-27

      回复 @ siki: 谢谢老师 真是对自己无语了,解决了 我前面想到 这段 (camera.right * z + forward * x) 太愚钝了,没会写! 谢谢老师 我

      (0) 回复
    • 丶CK 2017-06-27

      回复 @ siki: 建议: 我想到一点,因为自己经常看 A 计划内的问题 贴的时候想到的 建议老师 可以 在学院A计划 话题面板 增加一块搜索功能,就是根据相关字 搜问题的 有时候 一些问题 重复的 找一下 能找到 也能很好的借鉴下!相似的 没搜索功能就每次看的时候在一个个翻

      (0) 回复
    • siki 2017-06-27

      回复 @ 丶CK: 好的 我跟开发那边建议一下

      (0) 回复
    还有-1条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!