前言
现在很多游戏都会在主页中显示一个场景,然后玩家的人物会在场景当中。这个时候往往会需要一些旋转功能,来方便玩家查看人物的各个角度。
一般的做法就是人物自身转动,摄像机不动,这样用户无法用其他视角观察到整个场景。另一种是人物不动,相机围绕人物,或者某个点转动,这种做法的缺点在于要么人物在屏幕中央(看向人物),要么会在屏幕左右乱跑(看向人物边上某个点),会局限UI的设计。
因此最好的方法便是可以让人物在屏幕中的任意位置,同时旋转起来的时候,转动相机,同时人物相对屏幕的位置也保持不变,如图:
github:https://github.com/luckyWjr/Demo
思路
因为相机看向的点(这里我们叫他LookedAt点),永远在屏幕的中央。假设我们的人物放在UI的左侧,那么我们要保证旋转相机的时候,人物的点(这里我们叫他Target点)在相机Camera看来始终在LookedAt点的左边。
我们可以把LookedAt点,Target点,和Camera,三个点想象成一个三角形,然后这个三角形围绕着Target点旋转,也就是LookedAt点和Camera同时以相同速度(角度/每秒)围绕Target点公转。即可实现我们要的效果
视角俯视或仰视的话,只需修改Camera的高度,其他两个点不动。
视角拉近或拉远,则需要同比例修改LookedAt点到Target点的距离和Camera到Target点的距离,Target点不动,即可保持三角形的三个角的角度不变。
代码实现
首先我们先搭建一个简单的场景,如图,Target点在LookAt点的左侧
我们可以先通过一些参数来初始化Camera的位置,然后此时Camera,LookedAt和Target三个点形成的三角形即我们到时候要旋转的样式。
然后获取变成和角度等,来计算旋转后的偏移值等等。具体注释见下面代码:
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]