У меня есть объект игрока, который может использовать несколько видов оружия. Когда оружие экипировано, родителем его трансформации становится его рука. Я некоторое время возился с этим и не могу заставить это работать как для хоста, так и для клиента. Прямо сейчас я пытаюсь установить оружие на сервере и сказать всем клиентам, чтобы они установили трансформации своих родителей.
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;
}
}
}
Я знаю, что это не самый оптимизированный способ сделать это ... но сейчас я просто пытаюсь заставить это работать любым возможным способом, а затем работаю над его настройкой. Похоже, это должна быть простая задача.