[Unity3d]第一人称和第三人称视角完美切换
最近一直在搞3D漫游,在第一人称和第三人称视角切换碰到些问题,视角的例子我是导入的官方的character controller包,不得不佩服官方脚本语言的写法,看了一下写的很完美,新手估计比较难看懂,里面涉及到一些角度,还有向量等的计算,这就要求有一定的图形学的基础,我将官方的第一人称视角和第三人称视角结合了一下,但发现还是不那么容易,不仅仅只是简单的摄像机的切换和position以及rotation的赋值而已,当然这种方法适合第三人称切换至第一人称,而第一人称切换至第三人称你会发现根本方向就切换不过来,位置是对了,但方向还是原来的方向,这就让我有点苦恼,然后不得已只能硬着头皮去看官方写的控制第三人称人物运行的脚本ThirdPersonController,里面有一些英文的注解,这脚本写的还是有一定的技术含量,毕竟是官方的嘛,想要看懂还是要慢慢静下心来看的。
无意中发现了一个巨牛巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,小白也能学,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家。点这里可以跳转到教程!
更多精品教程:
http://dingxiaowei.cn
实现步骤:
1.导入官方的第一人称和第三人称的Person,会发现,第三人称的Main Camera是在model的外面而第一人称的Main Camera是在model的里面,这里最好统一一下,我将第三人称的那个model拉到我新建的一个空物体下(记得reset这空物体),然后将主摄像机也拖放到这个空物体下,最好确保camera和3rdPersonController平级。这里还要说一下的,将3rdPersonController也reset一下,然后设置PositionY跟相机的Y一样,我这里设置的是51大概。
2.创建视角切换的脚本viewpointSwitch,挂在GUI的物体上,这个物体挂了一些关于GUI还有控制鼠标隐藏显示的脚本
鼠标隐藏和显示:
void Update()
{if (Input.GetKey(KeyCode.H))// Lock the cursor inside gameviewScreen.lockCursor = true;// Hide mouse cursorScreen.showCursor = false;if(Input.GetKey(KeyCode.U))// Lock the cursor inside gameviewScreen.lockCursor = false;//Show mouse cursorScreen.showCursor = true;
}
viewpointSwitch:
using UnityEngine;
using System.Collections;public class ViewpointSwitch : MonoBehaviour {//从场景中拖入的objectpublic GameObject Obj_3rd;public GameObject cam_3rd;public GameObject gobj_3rd;public GameObject Obj_1fs;public GameObject cam_1fs;public GameObject gobj_1fs;//记录刚进入第一人称视角时候的欧拉角和离开第一视角时候的欧拉角(Y方向)float pre1fsAngle = 0;float cur1fsAngle = 0;// Update is called once per framevoid Update (){//切换至第一人称视角if (Input.GetKey(KeyCode.F1)){//记录一开始//pre1fsAngle = cam_1fs.transform.eulerAngles.y;pre1fsAngle = cam_3rd.transform.eulerAngles.y; //记录的第一人称(这里取的是第三人称,其实是一样的)一开始的y方向欧拉角,这里没用上面注释掉的写法是防止重复按f1键切换然后覆盖初始值导致旋转角度差值缩小if (!Obj_1fs.activeSelf){Obj_1fs.SetActive(true);GameObject.Find("Main Character Controller").transform.localPosition = GameObject.Find("3rd Person Controller").transform.localPosition;GameObject.Find("Main Character Controller").transform.localRotation = GameObject.Find("3rd Person Controller").transform.localRotation;Obj_3rd.SetActive(false);}}//切换至第三人称视角if (Input.GetKey(KeyCode.F2)){cur1fsAngle = cam_1fs.transform.eulerAngles.y; //记录if (!Obj_3rd.activeSelf){Obj_3rd.SetActive(true);GameObject.Find("3rd Person Controller").transform.localPosition = GameObject.Find("Main Character Controller").transform.localPosition;//注意这里Mathf里面的方法是幅度,我这里就进行了一个角度转幅度的计算:幅度=角度*pi/180float angle = (cur1fsAngle - pre1fsAngle) * Mathf.PI / 180;gobj_3rd.GetComponent<ThirdPersonController>().v = Mathf.Cos(angle);gobj_3rd.GetComponent<ThirdPersonController>().h = Mathf.Sin(angle);print("旋转角度:" + (cur1fsAngle-pre1fsAngle));gobj_3rd.GetComponent<ThirdPersonController>().flag = true; //这个flag标志是让ThirdPersonController的update方法执行改变上面的v,h一次,然后第二帧的时候就执行v=Input.GetAxisRaw("Vertical")和h=Input.GetAxisRaw("Horizontal")Obj_1fs.SetActive(false);}}}
}
备注:
//w(1) & s(-1)(前后运动)
v = Input.GetAxisRaw("Vertical");
//a(-1) & d(1)(左右运动)
h = Input.GetAxisRaw("Horizontal");
这里的v和h变量要解释一下,v代表前后方向,如果按下前方向w键,这里Input.GetAxisRaw("Vertical")会有一个-1~1的一个变化,如果是遥感就会有浮点数,但如果是键盘的话,一般就是0,-1,1三个状态,按下w前进方向键,v会变成1,如果按下后退键s,v就会变成-1,如果不按则是0。h就是代表水平左右轴向,a键按下h=-1,d按下h=1,不按则代表0。
ThirdPersonController.js人物旋转的方向是始终转向一个前进的方向向量,var targetDirection = h * right + v * forward;
这里的right和forward分表表示X轴(forward方向)和Z轴(right方向)的单位向量
var forward = cameraTransform.TransformDirection(Vector3.forward);
var right = Vector3(forward.z, 0, -forward.x);
效果图:
1.刚开始启动,第三人称的模型朝向以及旋转坐标
2.按一下D键,也就是右键,人物旋转,90度,朝向以及旋转坐标,以及v,h(控制旋转方向的一个系数,上文有介绍)的值
在线展示:
http://ueige123.oicp.net/dingxiaowei/13viewpointswitch/13viewpointswitch.html
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:http://blog.csdn.net/dingxiaowei2013 MyQQ:1213250243
Unity QQ群:375151422 cocos2dx QQ群:280818155
====================== 相互学习,共同进步 ===================
转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/18281261
欢迎关注我的微博:http://weibo.com/u/2590571922
[Unity3d]第一人称和第三人称视角完美切换相关推荐
- UE4蓝图第一人称转第三人称视角编辑(GameOver时)
蓝图第一人称转第三人称视角编辑:打开BP_GameMode! 新建蓝图添加StaticMesh(静态网格体)固定在根目录下,添加相机(相机),设置隐藏在游戏中保证它再游戏中隐藏显示.
- Unity中自带的第一人称与第三人称视角之间的切换问题
第一人称[_Characters],第三人称主角[_3rdPersonViewpoint]: 第一人称视角与第三人称的差别在于鼠标旋转,经过测试在第三人称切换至第一人称时只要将3rd的localpos ...
- 虚幻四如何实现第一人称_ue4用C++怎么实现第一人称和第三人称之间的切换?
我最近也在做这个,所以说一下自己的思路,,,, 你应该去看看官方的第一人称射击例子,,,我自己的话大致有两种做法,,, 首先说镜头, 第一种,效果好一点的,需要两个模型和两个动作蓝图,一个是第三人称模 ...
- Unity 第一人称、第三人称、漫游视角 控制器.
前言 这是以前写的人物控制器(包含第一人称.第三人称.漫游视角),这里做个记录,方便后续参考使用. 实现 模型使用官方的,操作使用鼠标右键控制视角,键盘WASD.Shift控制人物移动. 切换到漫游视 ...
- 有趣的第一人称和第三人称游戏
有趣的第一人称和第三人称游戏 16340120 江城所在的数据科学与计算机学院 有趣的第一人称和第三人称游戏 前言 第一人称 -FPS一个简单的分类 第三人称 -代表作品 前言 相信基本大部分用电脑的 ...
- 使用three.js实现跟随模型的第一人称、第三人称相机控制
最近在我原有的"室内场景demo"的基础上做了一个跟随模型的第三人称相机控制,以键盘wasd控制模型的行走,以鼠标控制模型的朝向. 在线预览地址 CSDN下载地址ht ...
- [UE4]使用Is Locally Controlled解决第一人称和第三人称武器位置问题
一.在第一人称网络游戏中,自己看到的是第一人称,其他玩家看到的自己是第三人称. 二.由于第一人称和第三人称是不同的模型,所以枪在模型上面的插槽位置也会不一样. 三.在武器挂载在人物模型的使用,使用&q ...
- 视角设置(第一人称、第三人称)
从Blank项目开始,利用自带的第三人称游戏人物设置视角 看起来很简单,但是每次做到这里我都要调整好久,那就记录一下吧! 第一人称游戏视角 一.初始准备: 创建一个Blank项目.创建一个Game M ...
- 暴风魔镜VR(第一人称和第三人称)
今天讲讲魔镜漫游项目,先讲讲魔镜自带的两个漫游Demo,一个是第一人称的,另一个是第三人称的 使用也很简单,我们只要模仿就可以了 先说第一人称的 1. 删掉unity自带的相机 2. 换上魔镜的相机 ...
最新文章
- 1111B - Average Superhero Gang Power
- java split 逗号_java截取之空字符丢失
- python自动登录校园网 密码_python实现校园网自动登录的示例讲解
- LTRIM、RTRIM和TRIM在ORACLE中的用法:
- AIR 中 File 对象的几个系统文件夹及其属性.
- @Transactional 注解的失效场景
- Centos 解压命令
- 机器学习——支持向量机SVMpython实现
- 盘点计算机世界那些经典谣言
- frame或者iframe的contentwindow属性
- 划分子网后的三级结构
- Mybatis框架(复杂动态SQL),一对一,一对多,多对多
- Exception in thread “main“ java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibilit
- 应用ruby打造个性化的有道单词本 (二)
- 用c语言编写屏幕保护程序,用C语言编写屏幕保护程序.doc
- 第九届蓝桥杯决赛大学A组
- mysql备份命令_mysql命令行备份方法
- 什么是实体关系图(ERD)?
- php短信功能实现原理,基于信息熵原理分词的php实现
- ups不间断电源品牌_德国阳光蓄电池_蓄电池代理-山东万仁电源设备有限公司