总览图:
闲谈
这个帖子主要用来解决一些教学视频里讲的移动方法过于单调(WASD和上下左右)的问题,欢迎新手,不懂提问,谢绝装比大神0.0~
一、刚体(Rigidbody)移动
AddForce函数
1.基本使用
(1)获取组件Rb(this,GetCompoment,public)
(2)Rb.AddForce(new Vector3(Input.GetAxis("Horizontal") * speed, 0f, Input.GetAxis("Vertical") * speed) ;
(3)给刚体增加一个力
(4)相机跟随及旋转
(5)FollowPlayer脚本
(6)挂载在Camera上面
2.Main Camera与Camera保持相对距离(即与Player保持相对距离)
(1)
using UnityEngine;[/align] public class FollowPlayer : MonoBehaviour { public GameObject player; void Update () { this.GetComponent<Transform>().position = player.GetComponent<Transform>().localPosition; this.GetComponent<Transform>().Rotate(0, Input.GetAxis("Rotate"), 0); } }
(2)旋转
(3)旋转语句
this.GetComponent<Transform>().Rotate(0, Input.GetAxis("Rotate"), 0);//通过旋转Camera来旋转里面的Main Camera,理论上也可以直接旋转Main Camera,不过代码就会复杂不少
//Rotate是自定义输入,相当于Horizontal,具体设置为
3.旋转之后的前后左右移动
(1)脚本挂载在Player上面
Move()在Update里面执行
public void Move() { Rigidbody arrRigidbody; arrRigidbody = GetComponent<Rigidbody>(); _CameraTransform = _Camera.GetComponent<Transform>(); Vector3 force = new Vector3(Input.GetAxis("Horizontal") * speed, 0, Input.GetAxis("Vertical") * speed); float x = _CameraTransform.rotation.eulerAngles.x; float y = _CameraTransform.rotation.eulerAngles.y; float z = _CameraTransform.rotation.eulerAngles.z; force = Quaternion.Euler(x, y, z) * force; arrRigidbody.AddForce(force); }
(2)Transform.forward是简易版的移动函数,只能准确的向前后移动可能有助于帮助理解这个旋转后移动语句
二、角色控制器(CharacterController)移动
SimpleMove函数
1.基本使用
(1)获取组件CC(this,GetCompoment,public)
(2)CC.SimpleMove(new Vector3(Input.GetAxis("Horizontal") * speed, 0f, Input.GetAxis("Vertical") * speed) ;
2.旋转
将Camera和角色模型一起丢在Player下面就行了
MainPlayer组件挂载情况
3.旋转语句
transform.Rotate(new Vector3(0, Input.GetAxis("Rotate") * 60 * Time.deltaTime, 0));
//Rotate是自定义输入,相当于Horizontal,具体设置为~
4.旋转之后的前后左右移动
Move()在Update里面执行
public void Move()[/align]{ Vector3 force = new Vector3(Input.GetAxis("Horizontal") * speed, 0f, Input.GetAxis("Vertical") * speed); float x = arrplayer.GetComponent<Transform>().localRotation.eulerAngles.x; float y = arrplayer.GetComponent<Transform>().localRotation.eulerAngles.y; float z = arrplayer.GetComponent<Transform>().localRotation.eulerAngles.z; force = Quaternion.Euler(x, y, z) * force; controlle.SimpleMove(force);//controlle为前面获取的CC组件 }
5.关于Quaternion,localRotation.eulerAngles不懂的建议看API,因为介绍起来比较麻烦,我是看API之后输出这三个值才大致理解的~
一些截图因为没有留备份,不想再截一次了_(:з」∠)_,做了一个总览图,对着看吧(结构都一样)
作者:缈狐灵
原文:http://www.taidous.com/bbs/thread-34114-1-1.html