概述
1,创建一个简单的物体作为角色
2,为物体添加移动代码:本次使用的方式A、D键控制前后运动,W、S键控制转向
transform.Translate(0, 0, speed * Input.GetAxis("Vertical"));//Translate可以控制物体移动
transform.Rotate(0, speed *20* Input.GetAxis("Horizontal"),0);//Rotate可以控制物体转向
3,物体需要跳跃:当按下空格键,AddForce可以给物体一个力,而Vector.up可以控制力的方向向上
if(Input.GetKeyDown(KeyCode.Space))
{
this.GetComponent<Rigidbody>().AddForce(Vector3.up * 6000);
}
4,为了使得物体不摔倒,使用eulerAngles给物体一个角度判断`
if ((this.transform.eulerAngles.x > 90 && this.transform.eulerAngles.x < 270) || (this.transform.eulerAngles.z > 90 && this.transform.eulerAngles.z < 270))
{
transform.eulerAngles = new Vector3(0, 180, 0);
}
5,给物体添加一个跟随相机,首先创建一个相机,然后把这个脚本赋给相机,player为玩家,通过玩家的位置,来为相机创建一个跟随位置。
第二行的lerp是一个插值运算方法,可以使得相机平滑的跟随着人物来运动。
为了使得相机在人物背后,可以使用LookAt来注视玩家。
Vector3 camera_felow = player.position + Vector3.up * speed_one - first.forward * speed_two;
transform.position = Vector3.Lerp(transform.position, camera_felow, Time.deltaTime * smooth);
transform.LookAt(first.position);//lookat为注视物体的效果
最后附上完整的两个代码:
玩家:脚本直接添加在需要控制移动的角色身上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class three_run : MonoBehaviour
{
public float speed = 0.1f; //定义一个速度
void Update()
{
//控制物体的移动
transform.Translate(0, 0, speed * Input.GetAxis("Vertical"));
transform.Rotate(0, speed *20* Input.GetAxis("Horizontal"),0);
//实现跳跃的效果
if(Input.GetKeyDown(KeyCode.Space))
{
this.GetComponent<Rigidbody>().AddForce(Vector3.up * 6000);
}
//防止物体倒下(如果是角色控制器可以直接面板调整)
if ((this.transform.eulerAngles.x > 90 && this.transform.eulerAngles.x < 270) || (this.transform.eulerAngles.z > 90 && this.transform.eulerAngles.z < 270))
{
transform.eulerAngles = new Vector3(0, 180, 0);
}
}
}
相机:脚本添加到相机上面, 并将跟随的角色拖入
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class three_camera : MonoBehaviour
{
public Transform player;
public float speed_one=10f;
public float speed_two=10f; //使用speed_one,speed_two可以调整玩家和相机的距离
private float smooth = 1f;
void LateUpdate()
{
Vector3 camera_felow = player.position + Vector3.up * speed_one - player.forward * speed_two;
transform.position = Vector3.Lerp(transform.position, camera_felow, Time.deltaTime * smooth);
transform.LookAt(player.position);
}
}
最后
以上就是害羞白云为你收集整理的Unity 第三人称人物移动的全部内容,希望文章能够帮你解决Unity 第三人称人物移动所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复