it编程 > 游戏开发 > unity

Unity_角色移动_Translate

89人参与 2024-08-06 unity

角色移动的方式有很多种,比如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,这里提个醒就是他与物理引擎尽量不要一起使用否则造成角色移动乱象。

结尾:

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

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

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

UnityAPI的学习——Rigidbody类

08-06

Unity利用ZXing库 生成和识别二维码

08-06

Unity怎么通过WIFI连接真机调试

08-06

Unity3D教程

08-06

Unity 制作简单的轮播图

08-06

【Unity实现背包拖拽功能 】

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论