Unity3DFPS第⼀⼈称视⾓移动
第⼀次写博客,有什么不⾜之处请多多原谅,本章的主要讲的是fps的第⼀⼈称视⾓,我们要知道,第⼀⼈称视⾓在unity3d⾥怎么实现,主要有两个,⼀个是主⾓和另⼀个是摄像机。
(如果你们认真看完这个教程fps第⼀⼈称视⾓是完全可以学会的。不要跳⾏看,看完这个教程⼀个⼩时都不到。我相信有⼈连这个都没看直接看下⾯
⾸先上图:
Ethan这个主⾓是unity⾃带的模型,Main Camera是⼀个摄像机。(图⽚我没处理(你以为我不想啊博客没有截屏我有ps但是我已经懒得处理了)⾃已放⼤看)
第⼀步:将摄像机移到主⾓⾝上作为⼀个⼦级物体(然后在Scene⾯板,将移动摄像机到主⾓⾯前如我上⾯那图)。如我上图那样⼦。(这时候陈独秀同学会问:上⾯图那么⼤你要我怎么找啊)陈独秀你给我过来我⼀巴掌你,你不会看Create⾯板吗?就是那个⿊⾊箭头那个⾯板。对你没看错。就是⿊⾊箭头那⾥。(虽然画的丑了点,但是你们看明⽩就⾏了)
第⼆步:在主⾓⾝上添加⼀个Character Controller组件。(陈独秀:这什么⿁组件,在哪⾥啊),呵呵,Character Controller这个组件是⾓⾊控制器的意思。位置:在我上⾯图⽚右下⾓那⾥有⼀个Add Component在physics⾥⾯。
然后可以写(复制)代码了是不是很开⼼。(开⼼个⿁看到代码就直接复制粘贴你们nb,不修改,你们复制下⾯的代码能运⾏我拜你为师)(照着下⾯照⽚的代码抄的同学注意了最后⾯⼀⾏还有⼀个})
对没错就是上⾯那个那些代码。就50⾏不到就ok了,完成第⼀⼈称视⾓。(陈独秀:解析呢。都没有解析学个⽑啊)
唉陈独秀同学就是这么⼼急。我⼀⾏⼀⾏给你们解析清楚ok(说是这么说反正你们⼜不顺着⽹线来打我);
ps: 别复制下⾯代码。
CharacterController playerController; //这⾏代码是声明⼀个CharacterController类;
Vector3 direction; //声明3维向量;
public float speed = 1; //主⾓的移动速度
public float jumpPower = 5; //主⾓跳的⾼度
public float gravity = 7f; //重⼒
public float mouspeed = 5f; //⿏标快慢
public float minmouY = -45f; //限制⿏标y轴(你们想⼀想眼睛能看到后⾯的吗?可以的话你nb)
public float maxmouY = 45f;
float RotationY = 0f;
float RotationX = 0f;这两个存放的是⿏标输⼊
public Transform agretctCamera; //这个必须在Create⾯板拖放Main Camera(也就是摄像机)这个位置⾥否则没有效果,这个类是存放的是摄像机位置;
// U this for initialization
void Start () {
//这个函数就不说明了,看到这⾥的都是基础过关了吧?
playerController = this.GetComponent<CharacterController>(); //获取依附在这个物体上的CharacterController组件
Screen.lockCursor = true;//⿏标隐藏(新的unity5.0版本以上好像⽤这个会警告,我就不⽤新的了反正旧的能⽤我去研究新的⽤法⼲嘛,我有病啊,(你以为我会 }
// Update is called once per frame
void Update () {//这个⽅法都要我解析,陈独秀你过来,(蠢蠢欲动的陈独秀:我什么都没说好吗,关我什么事)
float _horizontal = Input.GetAxis("Horizontal");//将⽔平轴的给_horizontal
float _vertical = Input.GetAxis("Vertical");//同上(呵呵我会告诉你我懒得打)
自强不息的意思float _vertical = Input.GetAxis("Vertical");//同上(呵呵我会告诉你我懒得打)
if (playerController.isGrounded)
//(陈独秀:这个playerController是什么⿁啊)呵呵陈独秀同学坐下,我先给你⼀巴掌先前⾯不是声明了playerController获取CharacterController组件吗?这么快 {
direction = new Vector3(_horizontal,0,_vertical);//在地⾯上才能移动,这个是移动向量
if (Input.GetKeyDown(KeyCode.Space)) //检测你是否按下了空格键
direction.y = jumpPower; //如果按下了空格键就三维向量中的y轴等于jumpPower(呵呵,陈独秀同学是不是⼜忘了jumpPower是什么了,回头看看都声 }
direction.y -= gravity * Time.deltaTime;//这个在if语句外也就是说主⾓的向下的重⼒
playerController.ansform.TransformDirection(direction*Time.deltaTime*speed));
//这句就有点难理解了,我都不知道怎么解析, playerController.Move()这个是移动⽅法,playerC
//存放摄像机(也就是⿏标)x轴
RotationY -= Input.GetAxis("Mou Y") * mouspeed;//存放摄像机(也就是⿏标)y轴
RotationY = Mathf.Clamp(RotationY,minmouY,maxmouY);//限制⿏标上下,Mathf这个是数学函数的意思,Math不是数学吗?f不就是初中,⾼中的时候你 ansform.eulerAngles = new Vector3(0,RotationX,0);//主⾓的y轴旋转(为什么有两个0,你想想主⾓围着x轴旋转会怎样)
防震减灾应急预案
好了就到这了,有些⾃已百度吧,⽐如eulerAngles这个是什么意思(难道还要我解析给你们看,我⼜不是百科全书,想学的⼈我不说也
会,不想学的他早就xx掉我这条博客了,反之他⼜看不到,)重要的是⾃已理解。不是复制代码,没有⽤的。最后保存上⾯代码图⽚⾃已⼿
动打⼀遍吧。不会在下⾯留评论,别乱喷⼈啊,我幼⼩的⼼灵很脆弱的,(四年前的憨憨语⾔)
最后给上源码⼀份。
应有尽有的近义词这个代码可以复制哦:(照着上⾯图⽚抄的同学后悔了没) (我回来了,时隔4年,我看到有很多⼈都来看这个,有什么想学的,可以在
评论或者私信我,有时间我会出⼀个教程)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class fps1 : MonoBehaviour {
CharacterController playerController;
Vector3 direction;
public float speed = 1;
public float jumpPower = 5;
小猪历险记
public float gravity = 7f;
public float mouspeed = 5f;
public float minmouY = -45f;
public float maxmouY = 45f;
家人群名字叫什么好
float RotationY = 0f;
float RotationX = 0f;
public Transform agretctCamera;
// U this for initialization
void Start () {
playerController = this.GetComponent<CharacterController>();
Screen.lockCursor = true;
busy
}
// Update is called once per frame
void Update () {
float _horizontal = Input.GetAxis("Horizontal");
float _vertical = Input.GetAxis("Vertical");
if (playerController.isGrounded)
{
direction = new Vector3(_horizontal,0,_vertical);
if (Input.GetKeyDown(KeyCode.Space))
direction.y = jumpPower;
系统还原}
direction.y -= gravity * Time.deltaTime;
playerController.ansform.TransformDirection(direction*Time.deltaTime*speed));冰牛奶
RotationX += ansform.localEulerAngles.y + Input.GetAxis("Mou X") * mouspeed;
RotationY -= Input.GetAxis("Mou Y") * mouspeed;
RotationY = Mathf.Clamp(RotationY,minmouY,maxmouY);
}
}