Mirror ReplacePlayerForConnection old Object sill Persists

问题描述 投票:0回答:0

在我的游戏中使用角色选择器工作正常,除了旧的 PlayerObject 仍然存在(并且对象控制器还保留 PlayeriDNumber、连接 ID 和 playerSteamID 等信息。

一旦新角色被选中并生成,我该如何去摧毁旧对象?

`using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Mirror;
    using UnityEngine.UI;

    namespace CharacterSelection
    {
        public class CharacterSelect : NetworkBehaviour
        {
            [SerializeField] private GameObject characterSelectDisplay = default;
            [SerializeField] private Transform characterPreviewParent = default;
            [SerializeField] private Text characterNameText = default;
            [SerializeField] private float turnSpeed = 90f;
            [SerializeField] private Character[] characters = default;

            private int currentCharacterIndex = 0;
            private List<GameObject> characterInstances = new List<GameObject>();

            public override void OnStartClient()
            {
                foreach (var character in characters)
                {
                    GameObject characterInstance =
                        Instantiate(character.CharacterPreviewPrefab, characterPreviewParent);

                    characterInstance.SetActive(false);

                    characterInstances.Add(characterInstance);
                }
    
                characterInstances[currentCharacterIndex].SetActive(true);
                characterNameText.text = characters[currentCharacterIndex].CharacterName;
            }

            //Character Rotation in Selector
            private void Update()
            {
                characterPreviewParent.RotateAround(characterPreviewParent.position,                      characterPreviewParent.up, turnSpeed * Time.deltaTime);
            }

            public void RightSelectButton()
            {
                characterInstances[currentCharacterIndex].SetActive(false);

                currentCharacterIndex = (currentCharacterIndex + 1) % characterInstances.Count;

                characterInstances[currentCharacterIndex].SetActive(true);
                characterNameText.text = characters[currentCharacterIndex].CharacterName;
            }

            public void LeftSelectButton()
            {
                characterInstances[currentCharacterIndex].SetActive(false);

                currentCharacterIndex --;
                if(currentCharacterIndex < 0)
                {
                    currentCharacterIndex += characterInstances.Count;
                }

                characterInstances[currentCharacterIndex].SetActive(true);
                characterNameText.text = characters[currentCharacterIndex].CharacterName;
            }

            public void SelectCharacter()
            {
                CmdSelectCharacter(currentCharacterIndex);
                characterSelectDisplay.SetActive(false);
                Cursor.lockState = CursorLockMode.Locked;
                Cursor.visible = false;
            }

            [Command(requiresAuthority = false)]
            public void CmdSelectCharacter(int characterIndex, NetworkConnectionToClient sender = null)
            {
                GameObject characterInstance = Instantiate(characters[characterIndex].GameplayCharacterPrefab);
                NetworkServer.ReplacePlayerForConnection(sender, characterInstance);
            }

        }

    }
    `
c# multiplayer mirror steamworks-api
© www.soinside.com 2019 - 2024. All rights reserved.