1 前言

​ 相机跟随是相机指始终跟随特定游戏对象,有以下 2 种跟随效果:

  • 位置跟随:相机指向目标游戏对象的向量始终不变
  • 位置和姿态跟随:相机在目标游戏对象的坐标系下的坐标和朝向始终不变

​ 实现相机位置和姿态跟随最简单的方法是:将相机游戏对象拖拽到目标游戏对象下,即相机作为目标游戏对象的子对象,其原理是:子对象的位置和姿态始终跟随父对象的变化而变化,并且保持相对不变。本文不展示这种方式,将通过代码控制相机位置变换,实现相机跟随效果。

2 应用

2.1 位置跟随

1)游戏对象

​ 游戏对象的 Transform 组件参数如下:

Name Type Position Rotation Scale Color/Texture
Plane Plane (0, 0, 0) (0, 0, 0) (10, 10, 10) GrassRockyAlbedo
Tank Empty (0, 0.25, -5) (0, 0, 0) (1, 1, 1) ——
Button Cube (0, 0, 0) (0, 0, 0) (2, 0.5, 2) #228439FF
Top Cube (0, 0.5, 0) (0, 0, 0) (1, 0.5, 1) #228439FF
Gun Cylinder (0, 0, 1.5) (90, 0, 0) (0.2, 1, 0.4) #228439FF

​ 游戏对象的层级结构如下:

2)脚本组件

​ Tank.cs

using UnityEngine;

public class Tank : MonoBehaviour {

	void Update () {
float hor = Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical");
transform.Translate(0, 0, ver * Time.deltaTime * 3);
transform.Rotate(Vector3.up * hor * Time.deltaTime * 120f);
}
}

​ 说明:Tank.cs 脚本组件挂在 Tank 游戏对象上。

​ CameraFollow.cs

using UnityEngine;

public class CameraFollow : MonoBehaviour {
private Transform player; // 玩家
private Vector3 dir; // 初始相机到目标坦克的方向向量 void Start() {
player = GameObject.Find("Tank").transform;
dir = player.position - transform.position;
} void LateUpdate() {
transform.position = player.position - dir;
}
}

​ 说明:CameraFollow.cs 脚本组件挂在 Main Camera 游戏对象上。

3)运行效果

2.2 位置和姿态跟随

​ 游戏对象即其 Transform 组件参数同 2.1 节,。

1)脚本组件

​ Tank.cs 脚本组件同 2.1 节。

​ CameraFollow.cs

using UnityEngine;

public class CameraFollow : MonoBehaviour {
private Transform player; // 玩家
private Vector3 dir; // 初始相机到目标坦克的方向向量 void Start() {
player = GameObject.Find("Tank").transform;
dir = player.position - transform.position;
} void LateUpdate() {
transform.position = transformVecter(-dir, player.position, player.right, player.up, player.forward);
transform.rotation = Quaternion.LookRotation(player.position - transform.position);
} // 求以origin为原点, locX, locY, locZ 为坐标轴的本地坐标系中的向量 vec 在世界坐标系中对应的向量
private Vector3 transformVecter(Vector3 vec, Vector3 origin, Vector3 locX, Vector3 locY, Vector3 locZ) {
return vec.x * locX + vec.y * locY + vec.z * locZ + origin;
}
}

2)运行效果

​ 声明:本文转自【Unity3D】相机跟随

【Unity3D】相机跟随的更多相关文章

  1. Unity3D 相机跟随主角移动

    这里给主相机绑定一个脚本. 脚本写为: using UnityEngine; using System.Collections; public class camerafollow : MonoBeh ...

  2. Unity3D——相机跟随物体移动

    public Transform target; public float moveSmooth=5f; Vector3 offset; void Start () { offset = transf ...

  3. [原]unity3D 相机跟随

    using UnityEngine;using System.Collections; public class CameraFollow : MonoBehaviour {            p ...

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

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

  5. unity3D:游戏分解之角色移动和相机跟随

          游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...

  6. unity相机跟随Player常用方式

    固定跟随,无效果(意义不大) public class FollowPlayer : MonoBehaviour { public Transform Player; private Vector3 ...

  7. SurvivalShooter学习笔记(一.相机跟随)

    1.场景碰撞已好,地板需建一Quad去掉渲染留下碰撞,设置layer为Floor:用于建立摄像机朝向地面的射线,确定鼠标停留点,确定主角需要的朝向. 2.设置摄像机跟随主角: 本例中摄像机设置为正交模 ...

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

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

  9. Unity中几种简单的相机跟随

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

  10. unity_实用小技巧(相机跟随两个主角移动)

    在两人对战的游戏中,有时候我们希望能看清楚两玩家的状态,这时我们需要让相机跟随玩家,可是我们不能让相机只跟随一个玩家移动,这时我们可以取两玩家的中点作为相机的位置.方法如下: public Trans ...

随机推荐

  1. 06-逻辑仿真工具VCS-Debug

    逻辑仿真工具VCS verdi只进行debug进行使用,不进行编译,只进行产生波形之后的debug 仿真速度和代码质量有关系,选项也会影响仿真速度,行为级>RTL>门级 信号的可见性和可追 ...

  2. 使用华为路由连接WiFi,被限制网速?

    1.问题 使用华为路由连接WiFi,但是网速非常慢,经常半天才能加载一个界面? 2.解决方法 登陆http://192.168.3.1/网址,发现限速一栏被框选,取消即可

  3. js - 使用 scroll属性手撸轮播图 —— 无缝连接,更丝滑

    上效果图: 上代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset= ...

  4. phpcms: Warning: "continue" targeting switch is equivalent to "break" 解决方案

    Warning: "continue" targeting switch is equivalent to "break". Did you mean to u ...

  5. [转帖]Shell编程之函数

    目录 Shell函数 使用Shell函数的优点 Shell 函数定义 使用原则 函数传参 函数变量的作用范围 函数递归 阶乘 递归目录 函数库 Shell函数 将命令序列按格式写在一起 可方便重复使用 ...

  6. [转帖]ramfs、tmpfs、rootfs、ramdisk介绍

    ramfs.tmpfs.rootfs.ramdisk介绍   bootleader--->kernel---->initrd(是xz.cpio.是ramfs的一种,主要是驱动和为了加载ro ...

  7. [转帖]人大金仓和PG的关系

    作者:山抹微云链接:https://www.zhihu.com/question/582960448/answer/2997151260来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  8. [转帖]Sosreport:收集系统日志和诊断信息的工具

    https://zhuanlan.zhihu.com/p/39259107 如果你是 RHEL 管理员,你可能肯定听说过 Sosreport :一个可扩展.可移植的支持数据收集工具.它是一个从类 Un ...

  9. Nginx的Keepalive的简单学习

    摘要 最近发现某项目的Nginx负载服务器上面有很多Time_wait的TCP连接 可以使用命令 netstat -n |awk '/^tcp/ {++S[$NF]} END{for (a in S) ...

  10. 【JS 逆向百例】HN某服务网登录逆向,验证码形同虚设

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:某政务服务 ...