Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
使用Unet开发格斗游戏,人物移动,Transform同步不平滑的问题
LifeChanges发起了问答2017-09-25
2
回复
2321
浏览

Siki老师,您好!这是我第一次向您提交问题,希望得到您的帮助。我在项目局域网开发的过程中使用Unet进行同步,使用到Transform网络同步组件,我发现这个组件的网络传输速度最大每秒29帧,而我的本地移动是在Update中进行的,每秒大概执行60次往上,反正和这个29传输速率不一样,造成对方客户端我这个本地角色移动是瞬间移动一下一下的,看起来效果很不好,Unet下还能改进吗?还是说想要同步最好的效果,我完全舍弃Unet,使用Udp进行局域网的开发,自由度更大,自己定协议和传输时机,希望Siki老师帮忙给出您的建议

所有回复
  • siki 2017-09-25

    在Network Transform组件身上 有一个Movement设置,可以设置下 Interplote Movement Factor,这个是移动的插值因子,可以设置它来调节在同步移动过程中的位置插值运算,这样就不会卡顿了

    Unet和自己写Socket都行的,自己写肯定自由度更大

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • sdhexu 2017-09-26

    嘿嘿。。。说实话我也遇到跟你一样的问题啊。不过我没用siki大神说的插值方法。。。因为我之前也不知道。。。今天又学到一招啊!!!!谢谢siki大神,在sikiedu总能学到东东。。。

    我说说我是怎么弄的。

    public SomeClass : NetworkBehaviour
    {
    
        [ServerCallBack]
        private void Update()
        {
            bool bNeedTranslate = false;
            float rot = MyInput.rotation;
            if( rot > 0.01f || rot < -0.01f )
            {
                bNeedTranslate = true;
                rot *= Time.delelTime * m_RotationSpeed;
            }
    
            float mov = MyInput.movement;
            if( mov > 0.01f || mov < -0.01f )
            {
                bNeedTranslate = true;
                mov *= Time.dalelTime * m_MovementSpeed;
            }
    
            if( bNeedTranslate )
               RpcTranslate( rot, mov );
        }
    
    
        [ClientRpc]
        private void PrcTranslate( float r, float m )
        {
            transform.Rotate( transform.up, r );
            transform.Tranlate( transform.forword * m );
        }
    }

     

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!