在我的游戏中使用角色选择器工作正常,除了旧的 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);
}
}
}
`