微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity游戏开发——新发教你做游戏四:角色移动控制

一、前言

文章列表
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

通过speedforwardTime.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] 举报,一经查实,本站将立刻删除。

相关推荐