【问题标题】:Smooth camera rotate around the player in 3rd person平滑的相机以第三人称围绕玩家旋转
【发布时间】:2016-02-27 21:10:16
【问题描述】:

我遇到了平滑旋转的问题,我正在尝试制作一款具有旋转系统的游戏,例如 Temple Run。我不知道如何通过 lerp 将平滑旋转附加到偏移。

//Position
 public GameObject player;
 private Vector3 offSet;

 //Rotation
 //Quaternion localRotation;
 Quaternion leftRotation = Quaternion.Euler(new Vector3 (0, 90, 0));
 Quaternion rightRotation = Quaternion.Euler(new Vector3 (0, -90, 0));

 Vector3 lRotation = new Vector3(0.0f, -90f, 0.0f);
 Vector3 rRotation = new Vector3(0.0f, 90f, 0.0f);

 void Start () {
     offSet = transform.position - player.transform.position;
 }

 void Update () {
 }

 void LateUpdate(){

     transform.position = player.transform.position + offSet;
     transform.LookAt (player.transform);

     if (Input.GetKeyDown (KeyCode.LeftArrow) && GameObject.Find("Player").GetComponent<PlayerMovement>().turn) {

         offSet = Quaternion.Euler(lRotation)*offSet;
         transform.position = player.transform.position + offSet;
         transform.LookAt (player.transform);

     } else if (Input.GetKeyDown (KeyCode.RightArrow) && GameObject.Find("Player").GetComponent<PlayerMovement>().turn) {

         offSet = Quaternion.Euler(rRotation)*offSet;
         transform.position = player.transform.position + offSet;
         transform.LookAt (player.transform);
     }
 }

}

【问题讨论】:

    标签: rotation smooth unity5


    【解决方案1】:

    我建议在相机的变换上执行Transform.RotateAround(),使用玩家的游戏对象作为轴。

    例子:

    //in camera-code
    transform.RotateAround(player.transform.position, Vector3.up, 45f);
    

    希望对你有帮助!

    编辑: 此外,您还可以使用Mathf.LerpAngle代替固定值作为第三个参数,以确保更平滑的结果。

    【讨论】:

    • 谢谢,我不确定这是否可行,我需要让它保持旋转状态,因为当我按下键时调用 RotateAround 时,它只是旋转旋转,我立即设置并返回到默认旋转,那么我怎样才能让它保持在那个旋转中呢?
    • 好的,我使用了 Mathf.LerpAngle 函数,它工作得很好,现在唯一的问题是在按键后停止旋转循环。
    • @MrAbeckon 我不确定我是否理解。你能澄清一下吗?
    • 我的相机现在按我想要的方式旋转,当我按下键时,它一直在旋转,而不是我想在相机旋转 -90°/+90° 后停止旋转。这是我现在的代码:stackoverflow.com/questions/35541760/…
    • 您的代码仍然没有使用Transform.RotateAround,我仍然认为这会让您(以及使用相同代码的其他所有人)更容易理解。无论如何,看看你的代码,我建议在游戏运行时使用Debug.Log 来查找lAngle 的值,看看它是否符合你的期望。我认为它不符合if (lAngle &gt; 90f) 条件。万事如意!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多