Unity_角色移动_Translate

本文介绍了游戏中角色移动的多种方式,包括transform的translate、物理引擎的力控制、Lerp插值和平滑处理,以及如何通过Input获取键盘鼠标输入。特别提到了CharacterController的使用注意事项。
摘要由CSDN通过智能技术生成

角色移动的方式有很多种,比如transform自带的translate,或者物理引擎添加力Rigidbody.AddForce,再或者Lerp插值使用曲线,或导航系统或动画系统以及各种插件例如CharacterController的move和simplemove等等,其中物理引擎通过施加力的方式移动,这里不懂得可以去查一下牛顿运动定律啦~,Translate以及Lerp都是通过更改角色的位置、旋转、缩放去达到移动的效果,而插件则不同这里不做举例。

这里我们介绍简单的几种方式,剩下的方式后续陆续补充。

一、获取鼠标键盘输入方式

这里介绍常用的获取方式:

1.使用Input.GetKey或Input.GetKeyDown或Input.GetKeyUp获得键盘各个按键,其中GetKey为按键持续按压,GetKeyDown为点击一次,GetKeyUp为抬起一次。例如获取按键A单机一下为:

Input.GetKeyDown(KeyCode.A);

2.按下图找到ImputManager的Axes:

里面包含了例如水平轴输入Horizontal,竖直Vertical以及鼠标信息等,其中可以自己设置输入方式

在代码中的获取方式为:

 float horizontal = Input.GetAxisRaw("Horizontal");
 float vertical = Input.GetAxisRaw("Vertical");

注意一定要将GetAxisRaw(“”");双引号里面的名字写对,区分大小写。其中GetAxisRaw不做平滑处理而GetAxis做平滑处理,我希望我的移动精准控制,所以使用GetAxisRaw。

一、Translate

float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
if (vertical > 0)
{
    this.gameObject.transform.Translate(MoveSpeed*Time.deltaTime*up);
}
if (vertical < 0)
{
    this.gameObject.transform.Translate(MoveSpeed * Time.deltaTime * -up);
}
if (horizontal > 0)
{
    this.gameObject.transform.Translate(MoveSpeed * Time.deltaTime * Vector3.right);
}
if (horizontal < 0)
{
    this.gameObject.transform.Translate(MoveSpeed * Time.deltaTime * Vector3.left);
}

获取键盘输入后判断按键的方向,例如水平轴>0那一定是向右移动,因为GetAxisRaw返回[-1,1]的值。

如果向右移动则:让物体的Transform组件的Translate方法移动。这里movespeed代表移动速度,Time.deltaTime为一秒,right为Vector(1,0,0)。所以参数为速度乘以时间沿right方向前进,其他原理相同。

二、物理引擎

1.直接设置速度
Vector3 move = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical")); rigidbody.velocity = new Vector3(move.x * moveSpeed, rigidbody.velocity.y, move.z * moveSpeed);  
2.施加力加速度
rigidbody.AddForce(new Vector3(forceX, 0f, forceZ), ForceMode.Impulse);

上面施加了一个瞬时力让他移动。

具体放到物理引擎一章一并发出。

三、Lerp

对于Lerp的平滑处理有一个坑:

Vector3.Lerp(this.transform.position, 目标位置, Time.deltaTime);

问题在于平滑处理时候他会让对象无限接近目标位置,但永远不会完全到达,所以你会发现他的移动慢->快->慢的方式,有点像芝诺的乌龟。这里有两种方法解决,一种是使用曲线解决,一种是让插值因子不断改变一直相对于当前位置与目标位置的固定值。

具体结局方法与导航、动画系统等放到后续进行详细解释。如果需要可以评论优先发出。

四、CharacterController

因为上面提到了CharacterController,这里提个醒就是他与物理引擎尽量不要一起使用否则造成角色移动乱象。

结尾:

本篇针对我的文章“小地图”发出,具体各项补充稍缓。

有任何错误请指出,补充请评论,看到会第一时间回复,谢谢。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值