标签:
这节介绍Camera,在 角色控制器
这一节中介绍了一点镜头和屏幕还有场景位置的皮毛,今天介绍几种Camera的引用场景。
1 跟随主角(单机rpg ,网游 )
首先介绍常用的一种镜头跟随,参考一些常用的网游等,这一类的特点是以角色为中心,镜头跟随主角,并且可以通过右击滑动来旋转3D场景
先处理跟随,
先调整相机的大概位置,
点击左上角调整相机角度,看下图摄像机
调整好大概的角度,我设置的在猪脚的斜后方,然后给镜头添加脚本
private GameObject player;
private Vector3 cameraToPlayer;
void Awake()
{
//获取猪脚对象
player = GameObject.FindGameObjectWithTag(Tags.player);
//相机和角色的相对位置
cameraToPlayer = transform.position - player.transform.position;
}
void FixedUpdate()
{
//移动相机的位置跟随猪脚 相机当前位置 相机移动目标位置 速度
transform.position = Vector3.Lerp(transform.position, player.transform.position + cameraToPlayer, 1.5f);
}
这样相机就勉强算跟上猪脚了
然后我们来设置通过鼠标划屏来移动镜头的朝向。
private GameObject player;
private Vector3 cameraToPlayer;
void Awake()
{
//获取猪脚对象
player = GameObject.FindGameObjectWithTag(Tags.player);
//相机和角色的相对位置
cameraToPlayer = transform.position - player.transform.position;
}
void Update()
{
float mouseX;
float mouseY;
if(Input.GetMouseButton(0))
{
mouseX = Input.GetAxis("Mouse X") * 10;
mouseY = -Input.GetAxis("Mouse Y") * 10;
transform.Rotate(mouseY, mouseX, 0);
}
//移动相机的位置跟随猪脚 相机当前位置 相机移动目标位置 速度
transform.position = Vector3.Lerp(transform.position, player.transform.position + cameraToPlayer, 1.5f);
}
这里设置左键来调整camera的角度,虽然简单的实现了,当camera角度属性的Z一直变,实际使用效果不是很好。
2.第一视角(cf,cs)
大三亿类的游戏以第一视角为主,很有代入感。
要实现第一视角,要将Camera放在猪脚脑袋上
然后调整下初始视野
这样,camera算是猪脚的子对象了,会更随猪脚移动
现在处理camera的角度,在大三亿中,进游戏后鼠标点会变成准心,我们根据鼠标的在屏幕的轨迹来改动camera的角度属性
给camera添加脚本
void Update () {
transform.Rotate(-Input.GetAxis("Mouse Y"), Input.GetAxis("Mouse X"), 0);
}
是不是很简单,rotate的参数指围绕xyz轴旋转的角度。运行游戏后
真的很带感啊。
这里会有几个问题,1 镜头的角度需要微调,2 向后旋转会看到自己(这和初始位置有关)
3.第三视角(lol dota)
最后介绍的一种视角就是著名的小学生系列上帝视角。这种视角的特点就是自上而下观看,触到屏幕的边缘时会拖动屏幕。
我们先调整摄像机的角度。
这里就不需要改动摄像机的角度,只要改变摄像机的location就行了,Y轴由滚轮控制
先设置滚轮。
void Update()
{
//滚轮的返回值
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
//判断范围
if (transform.position.y +Input.GetAxis("Mouse ScrollWheel") >= 6.4 && transform.position.y + Input.GetAxis("Mouse ScrollWheel")<=9.4)
{
transform.position += new Vector3(0, Input.GetAxis("Mouse ScrollWheel"), 0);
}
}
}
然后设置屏幕的移动,当鼠标移动到边缘时移动Camera,想法就是先获取屏幕的大小,获取鼠标的位置,判断鼠标是否在边缘,然后获取鼠标的移动向量来移动Camera
Resolution screen;
void Start()
{
screen = Screen.currentResolution;
}
void Update()
{
//滚轮的返回值
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
//判断范围
if (transform.position.y +Input.GetAxis("Mouse ScrollWheel") >= 6.4 && transform.position.y + Input.GetAxis("Mouse ScrollWheel")<=9.4)
{
transform.position += new Vector3(0, Input.GetAxis("Mouse ScrollWheel"), 0);
}
}
//判断鼠标位置
if(MouseScreen())
{
//移动Camera的position
transform.position += new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y"));
}
}
private bool MouseScreen()
{
bool temp = false;
Vector2 tempPosition= Input.mousePosition;
if (tempPosition.x <2 || tempPosition.x > screen.width - 2)
{
temp = true;
}
if (tempPosition.x < 2 || tempPosition.x > screen.width - 2)
{
temp = true;
}
return temp;
}
这里能实现Camera的拖动,但有两个问题,只有当鼠标移动到屏幕的边缘而不是当前窗口的边缘,还有就是鼠标会脱界。
标签:
原文地址:http://www.cnblogs.com/ben1992/p/4191768.html