複数の武器を装備できるプレイヤー オブジェクトがあります。武器を装備すると、そのトランスフォームの親がその手に設定されます。私はしばらくこれをいじっていましたが、これをホストとクライアントの両方で機能させることができません。現在、私はサーバーに武器を装備しようとしており、すべてのクライアントに親の変換を設定するように指示しています。
public NetworkInstanceId weaponNetId;
[Command]
void Cmd_EquipWeapon()
{
var weaponObject = Instantiate (Resources.Load ("Gun"),
hand.position,
Quaternion.Euler (0f, 0f, 0f)) as GameObject;
weaponObject.transform.parent = hand;
NetworkServer.Spawn (weaponObject);
//set equipped weapon
var weapon = weaponObject.GetComponent<Weapon> () as Weapon;
weaponNetId = weaponObject.GetComponent<NetworkIdentity> ().netId;
Rpc_SetParentGameobject (weaponNetId);
}
[ClientRpc]
public void Rpc_SetParentGameobject(NetworkInstanceId netID)
{
weaponNetId = netId;
}
そして更新では、武器の変換を更新しています
void Update () {
// set child weapon tranform on clients
if (!isServer) {
if (weaponNetId.Value != 0 && !armed) {
GameObject child = NetworkServer.FindLocalObject (weaponNetId);
if (child != null) {
child.transform.parent = hand;
}
}
}
私はこれがこれを行うための最も最適化された方法ではないことを知っています。それは単純な作業であるように思われます。