老师 我做的demo类似于CS之战,但是依靠的是unet来联机,通过按下空格键来更换player的子弹,通过Q键来抓取炸弹和放置炸弹,但是更换子弹和拿起炸弹放置炸弹都只能在作为server端上实现,或者说在client端拿起放下炸弹后在server端看不到炸弹的位置移动,栽client端按下空格键子弹也无法更换,请问这是哪里的问题?急急急····
你的这个问题,我想应该从以下几个方面入手检查:
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 )
{
// 更换子弹的操作
}
}