功能效果展示
运行环境
Win7,Win8,Win10
Reworld版本 体验版
vc_redist.x64 运行环境
针对零基础读者的补充
下载安装 Reworld对应版本
Reworld官网链接:http://www.reworlder.com/
Reworld创作者之家论坛:http://bbs.reworlder.com
下载后安装后注册账号打开空地图
下载安装 vc_redist.x64.rar运行环境
思路分析
想要制作一个弧线,我们可以使用贝塞尔曲线来实现这个效果,我们让一个零件在5个零件间不断的进行取点计算线段的距离,通过零件的运动就可以绘制出一条贝塞尔曲线。具体关于贝塞尔曲线的解释可以查看链接:贝塞尔曲线扫盲
功能搭建
一、零件搭建过程
在工作区内创建5个零件,分别重命名为a,b,c,d,e。再创建一个零件重命名为ball,坐标与a相同。将6个零件如下图所示摆放位置:
二、核心功能搭建过程
在工作区内创建一个服务器脚本。如下图所示:
编写服务器脚本如下:
local gameOjbet\_tran = {} --路径物体里面存a,b,c,d,e
local point = {} --路径列表
local ball = WorkSpace.ball --移动物体
local Speed = 1 --速度
local Time1 = 0.01
local Timer = 0
local frame = 200 --帧率
local i = 2 --下坐标
--整个路径走的方向
local a = WorkSpace.a
local b = WorkSpace.b
local c = WorkSpace.c
local d = WorkSpace.d
local e = WorkSpace.e
local m\_camera = WorkSpace.摄像机
local isgo = true
--------------------------------------------------------------------------------
--使小球没曲线运动
--这里不能直接在for里以Point使用差值运算,看不到小球运算效果
--定义一个计时器,在相隔时间内进行一次差值运算。
local function Update()
if isgo == true then
Timer = Timer + Time.deltaTime
if Timer > Time1 then
Timer = 0
ball.Position = Vector3.Lerp(point\[i - 1\], point\[i\], 1) -- 移动
i = i + 1
if i >= #point then
isgo = false
end
end
end
end
m\_camera.CameraType = Enum.CameraType.Fixed
m\_camera.Position = Vector3(ball.Position.x,ball.Position.y,ball.Position.z)
local function Init()
m\_camera.Subject = ball
gameOjbet\_tran\[1\] = a
gameOjbet\_tran\[2\] = b
gameOjbet\_tran\[3\] = c
gameOjbet\_tran\[4\] = d
gameOjbet\_tran\[5\] = e
coroutine.start(function ()
for j = 1,200, 1 do
--一
coroutine.wait(0.0001) -- 延时检测 进行计算
local pos1 = Vector3.Lerp(gameOjbet\_tran\[1\].Position, gameOjbet\_tran\[2\].Position, j / frame)
local pos2 = Vector3.Lerp(gameOjbet\_tran\[2\].Position, gameOjbet\_tran\[3\].Position, j / frame)
local pos3 = Vector3.Lerp(gameOjbet\_tran\[3\].Position, gameOjbet\_tran\[4\].Position, j / frame)
local pos4 = Vector3.Lerp(gameOjbet\_tran\[4\].Position, gameOjbet\_tran\[5\].Position, j / frame)
--二
local pos1\_0 = Vector3.Lerp(pos1, pos2, j / frame)
local pos1\_1 = Vector3.Lerp(pos2, pos3, j / frame)
local pos1\_2 = Vector3.Lerp(pos3, pos4, j / frame)
--三
local pos2\_0 = Vector3.Lerp(pos1\_0, pos1\_1, j / frame)
local pos2\_1 = Vector3.Lerp(pos1\_1, pos1\_2, j / frame)
--四
local find = Vector3.Lerp(pos2\_0, pos2\_1, j / frame)
point\[j\] = find
end
print("开始跑了")
GameRun.Update:Connect(Update)
end)
end
Init()
补充说明
1.什么是工作区?
工作区中的对象是会被可视化显示到3D场景中的,并且只有在工作区中的对象才会发生物理交互。
2.什么是服务器脚本?
只会在服务器运行的Lua脚本代码,用于编写服务器逻辑。
3.为什么要使用服务器脚本?
_ 1.服务器脚本与客户端脚本不同,客户端执行的操作只有本地客户端,也就是玩家自己有效。而服务器执行的操作不仅针对单人有效,还针对与服务器相连的所有客户端同步生效。
2.在多人游戏中,如果这个对象的变化是针对一个人的,必须在客户端脚本进行编写;如果这个对象的变化是针对所有人的,那就必须在服务器脚本进行编写。
3.对于只能在客户端脚本修改的对象,如何让服务器知晓变化结果是很重要的。这里采用传统游戏的制作流程,也就是在客户端进行修改,把修改后的结果通过与服务器通信的方式发送到服务器,再通过服务器进行逻辑运算,把执行结果再同步给所有客户端。_
好了,接下来我们开始游戏,名为ball的零件就会从a零件到e零件做一个弧线的运动啦。如果有什么问题或者有更好的实现方式,大家可以在下方积极交流讨论,我们也会参与进来和大家一起分享经验,期望能和大家共同进步~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。