标签:
这节介绍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