Почему collider.enable = true не работает в моем коде? - PullRequest
1 голос
/ 06 июня 2019

Работая над игрой, похожей на астероид, когда мой корабль получает удар, он взрывается, и я создаю новый корабль и окружаю его щитом на несколько секунд.Пока корабль окружен щитом, я отключаю столкновения на несколько секунд.Это все работает.Через несколько секунд я скрываю щит (SetActive (false)) и затем устанавливаю playerCollider.enabled = true.Щит прячется, но коллайдер не активируется.

код для убитого

 public void KilledWaitTime()
    {
        SetLivesText();
        Instantiate(player); //respawns player after killed
        shield.SetActive(true);
        playerCollider.enabled = false; //disables collider while shield up.
        Debug.Log("collider = " + playerCollider.name);
        Debug.Log("player = " + player.name);
        Invoke("RemoveShields", 3);
    }

код для снятия щита и повторного включения коллайдера

 public void RemoveShields()
    {
        shield.SetActive(false);
       // Collider pc = player.GetComponent<Collider>();
        Debug.Log("collider pc = " + playerCollider.name);
        Debug.Log("player pc = " + player.name);
        playerCollider.enabled = true;

    }

1 Ответ

2 голосов
/ 06 июня 2019

Когда вы вызываете Instantiate(player);, вы создаете совершенно отдельный объект от объекта предыдущего игрока.Когда вы создаете экземпляр объекта player, вам нужно переназначить playerCollider, чтобы сослаться на коллайдер на только что созданном объекте.

Возможно, вы также захотите сохранить префаб вашего игрока и ваши объекты текущего игрока отдельно:

private GameObject playerPrefab;
private GameObject player;

public void KilledWaitTime()
{
    SetLivesText();
    player = Instantiate(playerPrefab); //respawns player after killed
    playerCollider = player.GetComponent<Collider>();

    shield.SetActive(true);
    playerCollider.enabled = false; //disables collider while shield up.
    Debug.Log("collider = " + playerCollider.name);
    Debug.Log("player = " + player.name);
    Invoke("RemoveShields", 3);
}
...