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

(197评价)
价格: 4431.00元
unet联机
冫爻刂发起了问答2017-08-16
2
回复
494
浏览

老师  我做的demo类似于CS之战,但是依靠的是unet来联机,通过按下空格键来更换player的子弹,通过Q键来抓取炸弹和放置炸弹,但是更换子弹和拿起炸弹放置炸弹都只能在作为server端上实现,或者说在client端拿起放下炸弹后在server端看不到炸弹的位置移动,栽client端按下空格键子弹也无法更换,请问这是哪里的问题?急急急····

所有回复
  • sdhexu 2017-08-16

    你的这个问题,我想应该从以下几个方面入手检查:

    1、炸弹应该是一个预制体,并且已经注册到NetworkManager的Spawnable Prefabs,它应该在服务端实例化,然后调用NetworkServer.Spawn方法实例化到每个客户端。并且他应该被添加NetworkTransform组件,否则位置不会同步。

    2、更换子弹,不知道是啥意思。是客户端自己更换子弹么。。。他们它的脚本应该类似这样:

    class YourClass : NetworkBehaviour
    {
        [SyncVar( hook = "OnBulletTypeChange" )]
        private BulletType m_bulletType;
       
        [Command]
        private void CmdChangeBullet( BulletType bt )
        {
            // 在服务器端更换子弹类型为bt
            m_bulletType = bt;
        }
    
    
        [ClientCallback]
        private void Update()
        {
            if( Input.GetKeyDown( KeyCode.Space ))
            {
                // 更换子弹
                CmdChangeBullet( BulletType.Normal );
            }
        }
    
        private void OnBulletTypeChange( BulletType bt )
        {
            // 更换子弹的操作
        }
    }

     

    • 冫爻刂 2017-08-18

      老师我在炸弹上添加过NetworkTransform,组件也在networkmanager上注册了Spawnable Prefabs,但是还是不能从client端同步位置,我猜测可能和world anchor有关。
      更换子弹这点,我的demo可能和按下Q键还不太一样,我再研究研究吧

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