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

(196评价)
价格: 4009.00元
关于transform.LookAt();
飞影翼闪发起了问答2018-05-15
3
回复
1368
浏览

老师好我在做sethlth案例是用transform.Lookat()方法控制摄像机的朝向主角,但是当摄像机到人物的正上方时移动人物摄像机会出现不正常的旋转怎么解决?

所有回复
  • siki 2018-05-16

    应该不是lookat造成的,你的跟随代码怎么写的呢,我看相机跟随到的角色的后面

    可能是计算跟随位置出错了

    • 飞影翼闪 2018-05-16

      这个我和老师您做的方法是一样的,我觉得是这个方法问题是因为我学过3d软件中的注视约束在
      经过最上方时,也会有近乎相同的情况,但是在这里也不知道是什么情况,下面是我照着老师写的代码,
      不知道具体要复制那些重要的所以全复制过来了,麻烦老师了。
      public class FollowPlayer : MonoBehaviour
      {
      private Transform player;
      public Vector3 offset;
      public float posSpeed = 0.25f;
      public float rotateSpeed = 0.25f;

      // Use this for initialization
      void Start ()
      {
      player = GameObject.FindWithTag(Tags.player).transform;
      offset = transform.position - player.position;
      offset=new Vector3(0,offset.y,offset.z);
      }

      // Update is called once per frame
      void Update ()
      {
      //transform.position = player.position + offset;
      Vector3 beginPos = player.position + offset;
      Vector3 endPos = player.position + offset.magnitude*Vector3.up;
      Vector3 pos1 = Vector3.Lerp(beginPos, endPos, 0.25f);
      Vector3 pos2 = Vector3.Lerp(beginPos, endPos, 0.5f);
      Vector3 pos3 = Vector3.Lerp(beginPos, endPos, 0.75f);
      Vector3[] posArray=new Vector3[]{beginPos,pos1,pos2,pos3,endPos};
      Vector3 targetPos = posArray[0];
      for (int i = 0; i < 5; i++)
      {
      RaycastHit hit;
      if (Physics.Raycast(posArray[i],player.position-posArray[i],out hit))
      {
      if (hit.collider.tag!=Tags.player)
      {
      continue;
      }
      else
      {
      targetPos = posArray[i];
      break;
      }
      }
      else
      {
      targetPos = posArray[i];
      break;
      }
      }
      //transform.position = targetPos;
      Quaternion nowRotate = transform.rotation;
      transform.LookAt(player.position,Vector3.up);
      transform.position = Vector3.Lerp(transform.position, targetPos, posSpeed * Time.deltaTime);
      Quaternion.Lerp(nowRotate, transform.rotation, rotateSpeed);

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2018-05-18

    这里是不是targetPosition出问题了呢,把TargetPosition打印出来,看看是不是得到了角色后面的位置,应该不是lookat的问题,是你的targetPosition计算出的问题

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