unity中相机追随

  • 固定相机跟随,这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动

  1. using UnityEngine;
  2. using System.Collections;
  3. public class CameraFlow : MonoBehaviour
  4. {
  5. public Transform target;
  6. private Vector3 offset;
  7. void Start()
  8. {
  9. //设置相对偏移
  10. offset = target.position - this.transform.position;
  11. }
  12. void Update()
  13. {
  14. this.transform.position = target.position - offset;
  15. }
  16. }
  • 固定相机跟随,带有角度旋转。这一种相机跟随是对第一种相机跟随的改进,在原有基础上面,添加了跟随角度的控制
  1. using UnityEngine;
  2. using System.Collections;
  3. public class CameriaTrack : MonoBehaviour
  4. {
  5. private Vector3 offset = new Vector3(0,5,4);//相机相对于玩家的位置
  6. private Transform target;
  7. private Vector3 pos;
  8. public float speed = 2;
  9. // Use this for initialization
  10. void Start ()
  11. {
  12. target = GameObject.FindGameObjectWithTag("Player").transform;
  13. }
  14. // Update is called once per frame
  15. void Update ()
  16. {
  17. pos = target.position + offset;
  18. this.transform.position = Vector3.Lerp(this.transform.position, pos, speed*Time.deltaTime);//调整相机与玩家之间的距离
  19. Quaternion angel = Quaternion.LookRotation(target.position - this.transform.position);//获取旋转角度
  20. this.transform.rotation = Quaternion.Slerp(this.transform.rotation, angel, speed * Time.deltaTime);
  21. }
  22. }
  • 第三人称相机,这种相机跟随。是第三人称角度看向对象的,也就是一直看向对象的后面,如一直显示玩家的后背
  1. using UnityEngine;
  2. using System.Collections;
  3. //相机一直拍摄主角的后背
  4. public class CameraFlow : MonoBehaviour
  5. {
  6. public Transform target;
  7. public float distanceUp=15f;
  8. public float distanceAway = 10f;
  9. public float smooth = 2f;//位置平滑移动值
  10. public float camDepthSmooth = 5f;
  11. // Use this for initialization
  12. void Start ()
  13. {
  14. }
  15. // Update is called once per frame
  16. void Update ()
  17. {
  18. // 鼠标轴控制相机的远近
  19. if ((Input.mouseScrollDelta.y < 0 && Camera.main.fieldOfView >= 3) || Input.mouseScrollDelta.y > 0 && Camera.main.fieldOfView <= 80)
  20. {
  21. Camera.main.fieldOfView += Input.mouseScrollDelta.y * camDepthSmooth * Time.deltaTime;
  22. }
  23. }
  24. void LateUpdate()
  25. {
  26. //相机的位置
  27. Vector3 disPos = target.position + Vector3.up * distanceUp - target.forward * distanceAway; transform.position=Vector3.Lerp(transform.position,disPos,Time.deltaTime*smooth);
  28. //相机的角度
  29. transform.LookAt(target.position);
  30. }
  31. }
  • 相机跟随,鼠标控制移动和缩放。相机与观察对象保持一定距离,可以通过鼠标进行上下左右旋转,通过鼠标滚轮进行放大和缩小操作

  1. using UnityEngine;
  2. using System.Collections;
  3. public class CameraFlow : MonoBehaviour
  4. {
  5. public Transform target;
  6. Vector3 offset;
  7. // Use this for initialization
  8. void Start()
  9. {
  10. offset = transform.position - target.position;
  11. }
  12. // Update is called once per frame
  13. void Update()
  14. {
  15. transform.position = target.position + offset;
  16. Rotate();
  17. Scale();
  18. }
  19. //缩放
  20. private void Scale()
  21. {
  22. float dis = offset.magnitude;
  23. dis += Input.GetAxis("Mouse ScrollWheel") * 5;
  24. Debug.Log("dis=" + dis);
  25. if (dis < 10 || dis > 40)
  26. {
  27. return;
  28. }
  29. offset = offset.normalized * dis;
  30. }
  31. //左右上下移动
  32. private void Rotate()
  33. {
  34. if (Input.GetMouseButton(1))
  35. {
  36. Vector3 pos = transform.position;
  37. Vector3 rot = transform.eulerAngles;
  38. //围绕原点旋转,也可以将Vector3.zero改为 target.position,就是围绕观察对象旋转
  39. transform.RotateAround(Vector3.zero, Vector3.up, Input.GetAxis("Mouse X") * 10);
  40. transform.RotateAround(Vector3.zero, Vector3.left, Input.GetAxis("Mouse Y") * 10);
  41. float x = transform.eulerAngles.x;
  42. float y = transform.eulerAngles.y;
  43. Debug.Log("x=" + x);
  44. Debug.Log("y=" + y);
  45. //控制移动范围
  46. if (x < 20 || x > 45 || y < 0 || y > 40)
  47. {
  48. transform.position = pos;
  49. transform.eulerAngles = rot;
  50. }
  51. // 更新相对差值
  52. offset = transform.position - target.position;
  53. }
  54. }
  55. }

Unity中几种简单的相机跟随的更多相关文章

  1. unity3d简单的相机跟随及视野旋转缩放

    1.实现相机跟随主角运动 一种简单的方法是把Camera直接拖到Player下面作为Player的子物体,另一种方法是取得Camera与Player的偏移向量,并据此设置Camera位置,便能实现简单 ...

  2. asp.net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  3. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  4. Java 项目中一种简单的动态修改配置即时生效的方式 WatchService

    这种方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的.例如 Spring mvc 以 war 包的形式部署,可以直接修改resources 中的配置文件.如果是 Sprin ...

  5. .net mvc中一种简单的工作流的设计

    开篇前的废话:工作流是我们在做互联网应用开发时经常需要用到的一种技术,复杂的工作流我们基本是借助一些开源的 工作流项目来做,比如 ccflow等,但是有时候,我们只需要实现一些简单的工作流流程,这时候 ...

  6. 在java 中一种简单方式的声明静态Map常量的方法

    我现在需要在一个类里面放一个HashMap,往里面放一些数据,每次要从数据库中取数据的时候先查找HashMap,看是否已经存在,若存在就直接提取,若不存在就从数据库中抽取数据之后再放到HashMap中 ...

  7. unity中三种调用其他脚本函数的方法

    第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名()第二种,GameObject.Find("脚本所在的物体的名字").SendMessage(" ...

  8. 关于Unity中OnGUI()的简单使用

    有时候想要输出一些数据到屏幕上方便查看,新建一个UI对象又挺麻烦,用OnGUI()在屏幕上直接绘制UI比较方便. GUI.Label(, , , ), “aaa", style); 这条语句 ...

  9. unity 常用的几种相机跟随

    固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...

随机推荐

  1. jmeter3.x的jtx文件解析

    jtl保存测试结果 打开jtl文件,内容为下: timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,suc ...

  2. TensorFlow笔记三:从Minist数据集出发 两种经典训练方法

    Minist数据集:MNIST_data 包含四个数据文件 一.方法一:经典方法 tf.matmul(X,w)+b import tensorflow as tf import numpy as np ...

  3. 转: RPC框架 远程对象服务引擎Hprose

    http://www.cnblogs.com/chenxizhang/archive/2010/07/18/1780258.html

  4. maven module和project的区别

    Maven Project可以理解为父工程.Maven Module可以理解为子工程.创建Maven Module工程必须有存在的父工程,maven就是通过父子工程进行工程管理的.

  5. SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

    落雨 cas 单点登录 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的 ...

  6. UNP学习笔记(第十五章 UNIX域协议)

    UNIX域协议是在单个主机上执行客户/服务器通信的一种方法 使用UNIX域套接字有以下3个理由: 1.UNIX域套接字往往比通信两端位于同一个主机的TCP套接字快出一倍 2.UNIX域套接字可用于在同 ...

  7. 面向对象在JavaScript中的接口实现

    接口是面向对象编程的基础.它是一组包括了函数型方法的数据结构,与类一样.都是编程语言中比較抽象的概念.比方生活中的接口.机顶盒.人们利用它来实现收看不同频道和信号的节目,它宛如对不同类型的信息进行集合 ...

  8. 事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

    ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover……)首先发生在document上,然后依次传 ...

  9. Key-Value键值存储原理初识(NOSQL)

    NO-Sql数据库:Not Only不仅仅是SQL 定义:非关系型数据库:NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固 ...

  10. 安装CoreOS到磁盘

    1 打开翻&&墙软件 2 打开迅雷,启用“使用IE代理”,下载以下两个文件:(翻&&墙后用IE下会中断) http://stable.release.core-os.n ...