如何做一个随机徘徊的小蝙蝠

功能效果展示

 

运行环境

Win7,Win8,Win10

Reworld版本 体验版

vc_redist.x64 运行环境

针对零基础读者的补充

下载安装 Reworld对应版本

Reworld官网链接http://www.reworlder.com/

Reworld创作者之家论坛:http://bbs.reworlder.com

下载后安装后注册账号打开空地图

下载安装 vc_redist.x64.rar运行环境

redist.x64下载链接

思路分析

想要制作一个随机徘徊的物体,我们首先需要设置随机徘徊的半径和距离,以圆圈上的一个点作为初始点,给物体一个速度,将随机位移加到初始点上,得到新的位置。这样我们就得到一个在圆圈内随机徘徊运动的物体。

功能搭建

一、小蝙蝠搭建过程

工作区内创建一个自定义零件,在自定义零件下导入一个小蝙蝠的模型,取消锚定。如下图所示:

二、核心功能搭建过程

自定义零件下创建一个服务器脚本。如下图所示:

编写服务器脚本如下:

math.randomseed(tostring(os.time()):reverse():sub(1, 7))
local a = script.Parent
--徘徊半径
local wanderradius = 100
--徘徊距离
local wanderdistance = 100
--每秒加到目标的随机距离的最大值
local wanderjitter = 100
--圆圈上一个点作为初始点
local circletarget = Vector3.New(wanderradius*0.707,0,wanderradius*0.707)
--最大速度
local maxspeed = 5
  
function move()
    local num = math.random(0,100)*0.01
    local num1 = math.random(0,100)*0.01
  
    --随机位移
    local randomdisplacement = Vector3.New((num-0.5)*2*wanderjitter,0,(num1-0.5)*2*wanderjitter)
    --将随机位移加到初始点上,得到新的位置
    circletarget = circletarget + randomdisplacement
    --由于新位置可能不在圆周上,因此需要投影到圆周上
    local num2 = circletarget.normalized
    circletarget = Vector3.New(wanderradius*num2.x,0,wanderradius*num2.z)
    --转换坐标
    local wandertarget = a.Velocity.normalized * wanderdistance + circletarget + a.Position
    --计算预期速度
    local desirevelocity = (wandertarget - a.Position).normalized*maxspeed
    a.Velocity = desirevelocity - a.Velocity
end
  
GameRun.Update:Connect(move)

补充说明

1.什么是工作区?

工作区中的对象是会被可视化显示到3D场景中的,并且只有在工作区中的对象才会发生物理交互。

2.什么是自定义零件?

自定义零件是零件的一种形式,包含物理模拟的自定义网格。使用其他3D建模软件创建的模型上传到重启世界编辑器时,被转化为游戏引擎可以读取的内部格式。

3.什么是服务器脚本?

只会在服务器运行的Lua脚本代码,用于编写服务器逻辑。

好了,接下来我们开始游戏,我们制作的小蝙蝠就会以随机徘徊的形式在一个圆圈内移动。如果有什么问题或者有更好的实现方式,大家可以在下方积极交流讨论,我们也会参与进来和大家一起分享经验,期望能和大家共同进步~~

发布了35 篇原创文章 · 获赞 2 · 访问量 5821

猜你喜欢

转载自blog.csdn.net/weixin_41987154/article/details/103005586