【Unity3D】相机跟随
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】相机跟随的更多相关文章
- Unity3D 相机跟随主角移动
这里给主相机绑定一个脚本. 脚本写为: using UnityEngine; using System.Collections; public class camerafollow : MonoBeh ...
- Unity3D——相机跟随物体移动
public Transform target; public float moveSmooth=5f; Vector3 offset; void Start () { offset = transf ...
- [原]unity3D 相机跟随
using UnityEngine;using System.Collections; public class CameraFollow : MonoBehaviour { p ...
- unity3d简单的相机跟随及视野旋转缩放
1.实现相机跟随主角运动 一种简单的方法是把Camera直接拖到Player下面作为Player的子物体,另一种方法是取得Camera与Player的偏移向量,并据此设置Camera位置,便能实现简单 ...
- unity3D:游戏分解之角色移动和相机跟随
游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...
- unity相机跟随Player常用方式
固定跟随,无效果(意义不大) public class FollowPlayer : MonoBehaviour { public Transform Player; private Vector3 ...
- SurvivalShooter学习笔记(一.相机跟随)
1.场景碰撞已好,地板需建一Quad去掉渲染留下碰撞,设置layer为Floor:用于建立摄像机朝向地面的射线,确定鼠标停留点,确定主角需要的朝向. 2.设置摄像机跟随主角: 本例中摄像机设置为正交模 ...
- unity 常用的几种相机跟随
固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...
- Unity中几种简单的相机跟随
#unity中相机追随 固定相机跟随,这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collectio ...
- unity_实用小技巧(相机跟随两个主角移动)
在两人对战的游戏中,有时候我们希望能看清楚两玩家的状态,这时我们需要让相机跟随玩家,可是我们不能让相机只跟随一个玩家移动,这时我们可以取两玩家的中点作为相机的位置.方法如下: public Trans ...
随机推荐
- 【C】C语言头文件互锁和包含问题
[来源] https://mp.weixin.qq.com/s/4tPHkwEd5n-xHNHJHtCoBw
- CSS - 设置自动等比例缩放
img { width: 100vw; height: 100vh; object-fit: cover; }
- 持续集成指南:Gitlab CI/CD 自动部署前端项目
前言 之前陆续写了 Gitlab 的安装使用还有 Gitlab CI/CD 的配置使用,已经把 AspNetCore 的后端项目都做了持续集成了,尝到甜头之后,现在前端的项目也要加入自动化部署,所以经 ...
- [转帖]聊聊TPS、QPS、CPS概念和区别
https://cloud.tencent.com/developer/article/1859053 TPS 概念 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒.它是 ...
- [转帖]TLS 1.2 浏览器兼容性
https://support-splashtopbusiness.splashtop.com/hc/zh-cn/articles/4414002633883-TLS-1-2-%E6%B5%8F%E8 ...
- [转帖]Linux ps -o 查看进程启动时间
https://www.cnblogs.com/apink/p/17572435.html 时间参数 如下表 参数 含义 start 显示进程启动时间的简短格式.通常,它会显示日期时间中的月-日 或 ...
- Grafana针对内存监控值的学习与使用
Grafana针对内存监控值的学习与使用 背景 因为学习内存相关的知识, 可以通过pgcacher/sar -r 等命令监控系统信息. 但是现在发现. 不太直观, 所以想着使用别的方式来进行处理. 然 ...
- 【转帖】MySQL索引
数据表如何用索引快速查找 索引是 排好序的快速查找的数据结构 索引存储在文件系统中 索引的文件存储形式与存储引擎有关 索引数据结构:可以是二叉树.红黑树.Hash表.B-Tree.B+Tree 1.二 ...
- [转帖]【JVM】字节码执行引擎
引入 class文件就是字节码文件,是由虚拟机执行的文件.也就是java语言和C & C++语言的区别就是,整个编译执行过程多了一个虚拟机这一步.这个在 类文件结构 中已经解释.上一节讲了虚拟 ...
- Spring Boot Admin极简教程
一.简介 Spring Boot Admin是一个完整的应用程序,用于监控和管理Spring Boot应用.原理是通过调用Spring Boot Actuator提供的http接口来实现的监控和管理, ...