在Dedicated Server模式下,我是服务端和客户端一起做射线检测,结果检测的结果服务端和客户端偏差很大。。感觉就像角色位置没同步,但是我输出了客户端和服务端的角色位置发现是一样的。
假如不用Dedicated Server,Server注视着Client或者在Client附近,可以获得准确结果,但是假如远离并且不注视Client,那么Server检测还是没法拿到结果。
请问这是什么原因造成的?剑是Attach到Mesh的Socket上的,射线检测是剑来触发的。
在Dedicated Server模式下,我是服务端和客户端一起做射线检测,结果检测的结果服务端和客户端偏差很大。。感觉就像角色位置没同步,但是我输出了客户端和服务端的角色位置发现是一样的。
假如不用Dedicated Server,Server注视着Client或者在Client附近,可以获得准确结果,但是假如远离并且不注视Client,那么Server检测还是没法拿到结果。
请问这是什么原因造成的?剑是Attach到Mesh的Socket上的,射线检测是剑来触发的。
又测试了下,感觉上来说是Server远离了一定程度后在Server一定范围之外的动画就不播放了,请问有什么选项可以强制动画播放?
102256-
你的问题里面包含有很多因素
我这里无法针对那么多因素帮你分析你的原因,建议您先通篇的看一遍 这个网络相关的文档 我们看看是否能在文档的基础上进一步讨论交流。
谢谢你TIANMIN 回答我的问题。
我看了文档,并且核对了自己的代码,动画我是用AnimMontage通过服务端多播发送请求让Client播放的。我现在做了如下测试,将服务端剑的位置广播到客户端,然后发现了如下问题。
你能更详细的描述一下你是如何做 “动画我是用AnimMontage通过服务端多播发送请求让Client播放的。” 这件事情的吗?
从你这个 GIF 看
我猜你的红色的粗线想表达的是服务端的剑的位置?因此看起来像是服务端并未播放挥剑动画?所以这里和上面我列的一些因素都有关系,还需要你把细节更多的描述一下~
Montage是使用多播进行播放的,剑是单独的Actor,红线代表的是Server端剑的位置,假如Server能看到Client的话那Client剑的位置和红线是一致的,而假如Server远离Client并且看不到Client的动画的话就会出现上面的情况。
而且我测试了下,单机的情况下放置两个AI在远处Player看不到的地方,同样会出现动画没播放的情况,给我的感觉就是虚幻将玩家看不到的动画给优化掉了。
谢谢。
这个问题主要是因为“Server注视着Client或者在Client附近”的情况下,引擎的replication优先级比较高,离得远和背向面只类的对象,为了降低网络带宽和cpu,引擎会降低同步频率。要提高特定的对象的同步频率的做法有很多种。
其实引擎在这里做的中近远距离,背向面,视野扇形等各种细节的权重调整计算,你可以直接看AActor::GetNetPriority函数来理解。
谢谢Mi.Wang回答我的问题,我被这个问题困扰好久了,我尝试着按你说的将GetNetPriority重写并返回了4.f,然而并没有解决问题。
我感觉是虚幻对场景中的动画做了优化,这个问题我已经不能上传gif图了,我新开了个问题,请移步到https://answers.unrealengine.com/questions/479854/%E5%85%B3%E4%BA%8E%E8%99%9A%E5%B9%BB%E5%8A%A8%E7%94%BB%E5%9C%A8%E6%B8%B8%E6%88%8F%E4%B8%AD%E4%B8%8D%E6%92%AD%E6%94%BE%E7%9A%84%E9%97%AE%E9%A2%98.html看看。
谢谢~