一、前言
文章列表
Unity游戏开发——新发教你做游戏(一):打开游戏开发新世界的大门
Unity游戏开发——新发教你做游戏(二):60个Unity免费资源获取网站
Unity游戏开发——新发教你做游戏(三):3种资源加载方式
Unity游戏开发——新发教你做游戏(四):角色移动控制
Unity游戏开发——新发教你做游戏(五):导航系统Navigation
Unity游戏开发——新发教你做游戏(六):教你2个步骤实现摇杆功能
Unity游戏开发——新发教你做游戏(七):Animator控制角色动画播放
本工程
Demo
我已上传到GitHub
,感兴趣的同学可以下载下来学习。GitHub
工程地址:https://github.com/linxinfa/Unity-RpgGameDemo嗨,大家好,我是新发,上一篇文章我们讲了资源的加载方式。这篇文章,我将介绍如何控制角色移动。
二、角色移动控制
1、移动需要什么数据
我们思考一下,移动需要什么数据?
最基本的,一个是移动速率,一个是移动的方向。
我们先定义两个变量
public float speed;
public Vector3 forward;
2、原理
物体移动需要通过Transform
来控制,一个是坐标(positon
),一个是朝向(forward
)。
帧于帧之间的时间间隔是
Time.deltaTime
通过speed
、forward
和Time.deltaTime
,我们就可以计算出下一帧的坐标(positon
)和角度(forward
),然后赋值给角色的Transform
即可。
3、具体代码
如下,其中modelTrans
是模型的Transform
。
modelTrans.position += forward.normalized * speed * Time.deltaTime;
modelTrans.forward = forward;
不过上面的写法,是直接赋值坐标和朝向,变化不够平滑,我们可以使用插值来平滑一下过渡。
float deltaTIme = Time.deltaTime;
float lerpDelta = 50;
Vector3 nextPos = modelTrans.position + forward.normalized * speed * deltaTime;
//线性插值坐标
modelTrans.position = Vector3.Lerp(modelTrans.position, nextPos, lerpDelta * deltaTime);
//线性插值朝向
m_modelTrans.forward = Vector3.Lerp(m_modelTrans.forward, forward, lerpDelta * deltaTime);
三、问题
1 如何限制角色在地图中移动,而不会超出地图外面?
2 移动需要的朝向数据是从摇杆传过来的,摇杆如何制作?
这两个疑问我将在后面的文章具体讲解~
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。