Может кто-нибудь объяснить, как я могу просто позвонить для ridgedbody2d с этим кодом? - PullRequest
0 голосов
/ 22 сентября 2019

поэтому у меня есть скрипт, вызывающий из другого класса, мне интересно, как я могу написать это, чтобы уничтожить только ребристое тело 2d.Я знаю, что он будет держать спрайт в сцене, что я и ищу.

private void OnTriggerEnter2D(Collider2D other)      
{
     DamageDealer damageDealer = other.gameObject.GetComponent<DamageDealer>();
     health -= damageDealer.GetDamage();
}

1 Ответ

1 голос
/ 22 сентября 2019

Если вы передадите ссылку Component на Destroy, она уничтожит только соответствующий компонент, но оставит GameObject нетронутым

Объектobj будет уничтожен сейчас или если время будет указано через t секунд. Если obj равен Component, он удалит компонент из GameObject и уничтожит его .Если obj равен GameObject, он уничтожит GameObject, все его компоненты и все дочерние элементы преобразования GameObject.

Destroy(damageDealer.GetComponnet<Rigidbody2D>());

Если вы сделаете это довольно часто,может быть, лучше сохранить эту ссылку уже в Awake компонента DamageDealer, а затем передать его как

public class DamageDealer : MonoBehaviour
{
    // if possible already reference this via the Inspector
    [SerializeField] private Rigidbody2D rigidbody;

    // This is a read-only property returning the value of rigidbody
    public Rigidbody2D Rigidbody => rigidbody;

    private void Awake()
    {
        if(!rigidbody) rigidbody = GetComponnet<Rigidbody2D>();

        ...
    }

    ...
}

, а затем вы можете просто сделать

Destroy(damageDealer.Rigidbody);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...