예제 #1
0
    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);
    }
예제 #2
0
    // 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;
    }
예제 #3
0
    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;
    }
예제 #4
0
    // 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;
    }
예제 #5
0
    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;
    }