网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月16日漏签0天
godot吧 关注:9,852贴子:43,082
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 4回复贴,共1页
<<返回godot吧
>0< 加载中...

关于多人游戏的平滑移动问题

  • 只看楼主
  • 收藏

  • 回复
  • 大胖猫儿
  • 着色器
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
remote func _set_position(pos):
position = pos
func _physics_process(delta):
rpc_unreliable("_set_position", position)
亲测走路会抖动,卡顿。
如果互相传递速度则不会有这个问题,代码如下:
remote func _set_position(pos):
position = pos
remote func _set_velocity(velocity):
position += velocity
func _ready():
rpc_unreliable("_set_position", position)
func _physics_process(delta):
rpc_unreliable("_set_velocity", velocity)
但是这样就会有个新的问题:如果两个玩家在游戏中发生了碰撞,位置就会不同步。
有更好的解决方案吗?


  • 人类的大敌
  • 吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
网络同步大概是制作游戏中非常复杂的一个部分了,许多高手都会觉得艰难(尤其是数据量越大的时候)
我也想不到良好的解决方案。只有一些简单的思路:比如平时采用平滑移动,然后每间隔一段时间后再传递位置,来确保位置同步

否则就是看一些教程,或许可以知道其他人怎么处理网络同步


2026-01-16 19:37:48
广告
不感兴趣
开通SVIP免广告
  • colaice2011
  • 网络联机
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
没有网络游戏的开发经验,不一定看懂了,随便说下仅供参考.
我觉得你没有去修正网络延时.
假设a和b同时从两端出发,并且向服务器端发送移动指令.
并且根据服务器反馈的指令模拟对方的移动(你上边的程序是这个意思吧?)
假设存在延时,,这导致a接受到b移动的指令,和b接受到a移动的指令时已经过去了1秒.

造成这种情况的原因是,a知道b移动时,b已经移动一段时间t了
你需要修正这段时间造成的位置偏差.
首要你在传递指令的时候,应该附加上时间.t1
而a接收到指令的时间是t2,而t2-t1就是b已经移动的距离.
但后边的难点是如何让这种修正自然.
最简单的就是直接位移,但这样会出现画面的跳跃.不过是最好处理的方式.
复杂点可能可以通过给b加速的方式,让模拟b追上实际b.
但如果没追上之前就发生了碰撞,同样会导致位置的偏差,所以追击需要考虑碰撞.
还可能还没追上,b客户端又发出了转向的指令
反正你自己考虑吧.


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回godot吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示