Я пытаюсь создать спаунер для своего плеера, но у меня с ним некоторые проблемы. Это мой код ниже
public class GameManager : MonoBehaviour
{
[SerializeField] private GameObject playerPrefab;
private GameObject currentPlayer;
[SerializeField] Vector2 respawnPoint;
[SerializeField] private Text playerLivesText;
static public bool playerAlive;
private void Start()
{
playerLivesText.text = Player.playerLives.ToString();
playerAlive = true;
}
private void Update()
{
LoseGame();
if (!playerAlive)
{
RespawnPoint();
}
}
private void RespawnPoint()
{
if (playerPrefab != null)
{
playerPrefab = currentPlayer;
currentPlayer = Instantiate(playerPrefab, respawnPoint, Quaternion.identity);
playerAlive = true;
}
}
Я ожидаю, что этот код будет работать так: когда игрок умрет, он возродится в respawnPoint, но после этого PlayerPrefab всегда отсутствует в инспекторе, и Unity не может возродить моего игрока. Поскольку у меня ошибка «Отсутствует ссылка», ArgumentException: объект, экземпляр которого вы хотите создать, имеет значение null или ничего не происходит, но игрок все еще не возрождается. Я не могу понять, как я могу снова назначить своего игрока в префабе игрока после его первой смерти.
playerPrefab = CurrentPlayer; если вы уничтожили свой плеер, вы установите для него недопустимую опцию. Почему для него установлено значение currentplayer?
@derHugo да, я использую Destroy(), чтобы убить своего игрока на месте. И, отвечая за вас на второй вопрос, я думал, что если я напишу так, Unity снова автоматически назначит игрока и все заработает, но я ошибся.
ну, вам, вероятно, следует просто удалить эту строку... вам нужен свежий клон префаба, а затем правильно сохранить ссылку на этот клон в currentPlayer
@derHugo, но я не понимаю, как получить ссылку, думаю, это моя главная проблема
@BugFinder, потому что я думал, что это сработает, но я ошибался. И теперь я пытаюсь понять, как я могу это исправить
ваш префаб должен быть чем-то живым в ресурсах... в противном случае вам бы хотелось создать клон, прежде чем уничтожить исходный.... но опять же мне интересно, зачем вам вообще его уничтожать... вы могли бы просто повторно использовать вместо этого существующий экземпляр
вы должны удалить эту строку: playerPrefab = currentPlayer; и убедитесь, что вы установили поле playerPrefab в инспекторе с префабом из окна проекта, а не с префабом из иерархии.
а ты
Destroy
это где-то (вероятно, вLoseGame
, которым ты не поделился)? Почему вы ставитеplayerPrefab = currentPlayer;
?