• 设置 相机跟随 主角及视角 滑动


     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class CameraFllow : MonoBehaviour {
     5 
     6     private Transform player;
     7     public float speed = 3;
     8 
     9     void Start()
    10     {
    11         //向服务器实时更新数据的时候 将Player信息也更新
    12         player = GameDataUtil.playerModel.transform;
    13     }
    14 
    15     void Update()
    16     {
    17         //由 摄像机 和 玩家固定距离偏量 构建插值
    18         Vector3 targetPos = player.position + new Vector3(0.28f,20.56f,60f);
    19         //移动
    20         transform.position = Vector3.Lerp(transform.position , targetPos , speed * Time.deltaTime);
    21         //角度的移动 lookRotation 是按向量变换时的长度 来变的 ,相减 是由相机位置指向玩家
    22         Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);
    23           // Slerp是根据 变换过程中角度的变化 插值的
    24         transform.rotation = Quaternion.Slerp(transform.rotation , targetRotation , speed * Time.deltaTime);
    25     }
    26 }
     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class FollowPlayer : MonoBehaviour {
     5 
     6     private Transform player;
     7     private Vector3 offsetPosition;//位置偏移
     8     private bool isRotating = false;
     9 
    10 
    11     public float distance = 0;
    12     public float scrollSpeed = 10;
    13     public float rotateSpeed = 2;
    14 
    15     // Use this for initialization
    16     void Start () {
    17         player = GameObject.FindGameObjectWithTag(Tags.player).transform;
    18         transform.LookAt(player.position);
    19         offsetPosition = transform.position - player.position;
    20     }
    21     
    22     // Update is called once per frame
    23     void Update () {
    24         transform.position = offsetPosition + player.position;
    25         //处理视野的旋转
    26         RotateView();
    27         //处理视野的拉近和拉远效果
    28         ScrollView();
    29     }
    30 
    31     void ScrollView() {
    32         //print(Input.GetAxis("Mouse ScrollWheel"));//向后 返回负值 (拉近视野) 向前滑动 返回正值(拉远视野)
    33         distance = offsetPosition.magnitude;
    34         distance += Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;
    35         distance = Mathf.Clamp(distance, 2, 18);
    36         offsetPosition = offsetPosition.normalized * distance;
    37     }
    38 
    39     void RotateView() {
    40         //Input.GetAxis("Mouse X");//得到鼠标在水平方向的滑动
    41         //Input.GetAxis("Mouse Y");//得到鼠标在垂直方向的滑动
    42         if (Input.GetMouseButtonDown(1)) {
    43             isRotating = true;
    44         }
    45         if (Input.GetMouseButtonUp(1)) {
    46             isRotating = false;
    47         }
    48 
    49         if (isRotating) {
    50             transform.RotateAround(player.position,player.up, rotateSpeed * Input.GetAxis("Mouse X"));
    51 
    52             Vector3 originalPos = transform.position;
    53             Quaternion originalRotation = transform.rotation;
    54 
    55             transform.RotateAround(player.position,transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));//影响的属性有两个 一个是position 一个是rotation
    56             float x = transform.eulerAngles.x;
    57             if (x < 10 || x > 80) {//当超出范围之后,我们将属性归位原来的,就是让旋转无效 
    58                 transform.position = originalPos;
    59                 transform.rotation = originalRotation;
    60             }
    61 
    62         }
    63 
    64         offsetPosition = transform.position - player.position;
    65     }
    66 }
  • 相关阅读:
    velocity masterplate 第一个程序的运行
    java 关于集合框架
    java 关于>>>位运算
    QCA wifi驱动强制为HT40
    Linux内核调试方法的总结(转载)
    移动端利用webkitbox水平垂直居中
    Under Construction to Beta
    网站自动备份
    writely 邀请?
    Google Carlendar coming ?
  • 原文地址:https://www.cnblogs.com/bambomtan/p/4742115.html
Copyright © 2020-2023  润新知