void OnClientCharactersAvailable(NetworkMessage netMsg) { charactersAvailableMsg = netMsg.ReadMessage <CharactersAvailableMsg>(); print("characters available:" + charactersAvailableMsg.characters.Length); // set state state = NetworkState.Lobby; // clear previous previews in any case ClearPreviews(); // load previews for 3D character selection for (int i = 0; i < charactersAvailableMsg.characters.Length; ++i) { CharactersAvailableMsg.CharacterPreview character = charactersAvailableMsg.characters[i]; // find the prefab for that class Player prefab = GetPlayerClasses().Find(p => p.name == character.className); if (prefab != null) { LoadPreview(prefab.gameObject, selectionLocations[i], i, character); } else { Debug.LogWarning("Character Selection: no prefab found for class " + character.className); } } // setup camera Camera.main.transform.position = selectionCameraLocation.position; Camera.main.transform.rotation = selectionCameraLocation.rotation; // addon system hooks Utils.InvokeMany(typeof(NetworkManagerMMO), this, "OnClientCharactersAvailable_", charactersAvailableMsg); }
// handshake: character selection ////////////////////////////////////////// void LoadPreview(GameObject prefab, Transform location, int selectionIndex, CharactersAvailableMsg.CharacterPreview character) { // instantiate the prefab GameObject preview = Instantiate(prefab.gameObject, location.position, location.rotation); preview.transform.parent = location; Player player = preview.GetComponent <Player>(); // assign basic preview values like name and equipment player.name = character.name; for (int i = 0; i < character.equipment.Length; ++i) { ItemSlot slot = character.equipment[i]; player.equipment.Add(slot); if (slot.amount > 0) { // OnEquipmentChanged won't be called unless spawned, we // need to refresh manually player.RefreshLocation(i); } } // add selection script preview.AddComponent <SelectableCharacter>(); preview.GetComponent <SelectableCharacter>().index = selectionIndex; }
void OnClientCharactersAvailable(NetworkConnection conn, CharactersAvailableMsg message) { charactersAvailableMsg = message; print("存档中可用角色:" + charactersAvailableMsg.characters.Length); // set state state = NetworkState.Lobby; // clear previous previews in any case ClearPreviews(); // load previews for 3D character selection for (int i = 0; i < charactersAvailableMsg.characters.Length; ++i) { CharactersAvailableMsg.CharacterPreview character = charactersAvailableMsg.characters[i]; // find the prefab for that class Player prefab = GetPlayerClasses().Find(p => p.name == character.className); if (prefab != null) { LoadPreview(prefab.gameObject, selectionLocations[i], i, character); } else { Debug.LogWarning("没有找到对应类名的预制体 " + character.className); } } // setup camera Camera.main.transform.position = selectionCameraLocation.position; Camera.main.transform.rotation = selectionCameraLocation.rotation; }
// handshake: character selection ////////////////////////////////////////// void LoadPreview(GameObject prefab, Transform location, int selectionIndex, CharactersAvailableMsg.CharacterPreview character) { // instantiate the prefab GameObject preview = Instantiate(prefab.gameObject, location.position, location.rotation); preview.transform.parent = location; Player player = preview.GetComponent <Player>(); // assign basic preview values like name and equipment player.name = character.name; player.isAdministrator = character.isAdministrator; // add selection script preview.AddComponent <SelectableCharacter>(); preview.GetComponent <SelectableCharacter>().index = selectionIndex; }
private void LoadPreview(GameObject prefab, Transform location, int selectionIndex, CharactersAvailableMsg.CharacterPreview character) { // instantiate the prefab GameObject preview = Instantiate(prefab.gameObject, location.position, location.rotation); preview.transform.parent = location; Player player = preview.GetComponent <Player>(); // assign basic preview values like name and equipment player.name = character.name; string decompressor = CompressUMA.Compressor.DecompressDna(character.umaDna); player.umaDna = character.umaDna; preview.GetComponentInChildren <UMA.CharacterSystem.DynamicCharacterAvatar>().LoadFromRecipeString(decompressor); for (int i = 0; i < character.equipment.Length; ++i) { ItemSlot slot = character.equipment[i]; player.equipment.Add(slot); if (slot.amount > 0) { // OnEquipmentChanged won't be called unless spawned, we // need to refresh manually player.RefreshLocation(i); player.UpdateUma(); } } // add selection script preview.AddComponent <SelectableCharacter>(); preview.GetComponent <SelectableCharacter>().index = selectionIndex; }