zoukankan      html  css  js  c++  java
  • Unity摄像机跟随

    在Unity中摄像机跟随游戏对象移动一般有下列几种方式:

    ①.把摄像机设成player的子物体; 一般不推荐这种用法;

    ②.通过脚本获取玩家的位置,然后让摄像头跟随移动;

     1 using System.Collections;
     2 using System.Collections.Generic;
     3 using UnityEngine;
     4 public class CameraMoveScript:MonoBehaviour{
     5         
     6        public float distanceX;     //X轴
     7        public float distanceY;     //Y轴
     8        public float speed;         //速度
     9         
    10        private Vector3 targetPosition;    // 摄像头要移动的位置;
    11        private Vector3 offset;     //用于接受向量;
    12       
    13        Transform player;   // 玩家,被跟随者;
    14        
    15     void Start(){
    16        player=GameObject.FindWithTag("Player").transfrom;      //  通过被标签找到被跟随者;
    17        // 得到当前场景中摄像头需要跟随物体的偏移量(向量);
    18        offset=transform.position-player.position;     //  摄像头位置-玩家位置,得到向量;
    19        
    20        }
    21        // 摄像头跟随的代码必须写在LateUpdate中,防止空帧;  因为要先player先动,等player动了以后,摄像头跟随移动;
    22     void LateUpdate(){
    23        //  因为摄像头是在player背后,所以用减法得到摄像头的位置;
    24        transformPosition=player.position+Vector3.up*distanceY-Vector3.forward*distanceX;
    25        
    26        //  利用Lerp线性插值来实现缓动;
    27        transform.position=Vector3.Lerp(transform.position,targetPosition,Time.deltaTime*speed);
    28        //  让摄像头一直盯着玩家;
    29        transform.LookAt(player);
    30        //  玩家位置+偏移量;
    31        transform.position=player.position+offset;
    32        }
    33 }

    可以将上述代码进行合并这样代码显得跟加的简洁:

     1 using System.Collections;
     2 using System.Collections.Generic;
     3 using UnityEngine;
     4 public class CameraMoveScript:MonoBehaviour{
     5         
     6        public float distanceX;     //X轴
     7        public float distanceY;     //Y轴
     8        public float speed;         //速度
     9         
    10        private Vector3 targetPosition;    // 摄像头要移动的位置;
    11        private Vector3 offset;     //用于接受向量;
    12       
    13        Transform player;   // 玩家,被跟随者;
    14        
    15     void Start(){
    16        player=GameObject.FindWithTag("Player").transfrom;      //  通过被标签找到被跟随者;
    17        // 得到当前场景中摄像头需要跟随物体的偏移量(向量);
    18        offset=transform.position-player.position;     //  摄像头位置-玩家位置,得到向量;
    19        
    20        }
    21        // 摄像头跟随的代码必须写在LateUpdate中,防止空帧;  因为要先player先动,等player动了以后,摄像头跟随移动;
    22 
    23     void LateUpdate(){
    24              // 通过Lerp线性插值来设置摄像头的缓动;
    25              transform.position=Vector3.Lerp(transform.position,player.position+offset,Time.deltaTime*speed); // 可以不用speed来设置速度,直接跟定死;
    26              transform.LooAt(player);
    27        }
    28 }
    29   
  • 相关阅读:
    mac 界面以及界面浏览器等显示不全
    数组常用的方法总结
    工厂模式以及应用场景
    结构与布局-紧贴底部的页脚
    结构与布局-垂直居中
    vscode mac下终端code .快速打开工程文件
    javascript操作对象和集合(jquery 6)
    2018 Multi-University Training Contest 8
    2018 Multi-University Training Contest 8
    BZOJ 3196 二逼平衡树
  • 原文地址:https://www.cnblogs.com/fengjiulin110120/p/6723707.html
Copyright © 2011-2022 走看看