В Unity, если компонент находится в условии IF, используйте его немедленно. - PullRequest
1 голос
/ 16 июня 2020

Я видел сокращение «если компонент был найден в условии ЕСЛИ, используйте его» * ​​1001 *

поэтому вместо этого

SomeScript script = gameObject.GetComponent<SomeScript>();

if (script != null) {
  script.DoSomething();
}

я видел какое-то сокращение вроде это

if (SomeScript script = gameObject.GetComponent<SomeScript>()) {
  script.DoSomething();
}

Кто-нибудь знает, о чем я? Извините за незнание терминологии

Ответы [ 3 ]

3 голосов
/ 16 июня 2020

Вы, скорее всего, ищете (недавно добавленные, я думаю, начиная с 2019.2 и новее) TryGetComponent.

Из Unity docs :

Получает компонент указанного типа, если он существует.

TryGetComponent попытается получить компонент данного типа. Заметное отличие от GameObject.GetComponent заключается в том, что этот метод не выделяется в редакторе, когда запрошенный компонент не существует.

using UnityEngine;

public class TryGetComponentExample : MonoBehaviour
{
    void Start()
    {
        if (TryGetComponent(out HingeJoint hinge))
        {
            hinge.useSpring = false;
        }
    }
}

Или, используя ваш пример

if (TryGetComponent(out SomeScript script)) 
{
  script.DoSomething();
}

Если компонент будет найден с использованием TryGetComponent, ссылка на найденный компонент будет сохранена в параметре out , который затем можно будет использовать внутри блока if.

Если соответствующий компонент не найден, он переходит в раздел else.

2 голосов
/ 16 июня 2020

The true one liner ...

gameObject.GetComponent<SomeScript>()?.DoSomething();
1 голос
/ 17 июня 2020

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

 private someScript script;
 void Awake()
 {
     someScript = GetComponent<SomeScript>();
 }

А затем, когда вы используете его, например, в Update:

void Update()
{
     if(someScript)
     {
         // Do something with someScript
     }
     // or:
     someScript?.DoSomething();
 }

Настоятельно рекомендуется аннотировать свой скрипт атрибутом RequireComponent:

[RequireComponent(typeof(SomeScript))]
public class MyScriptThatRequiresSomeScript : MonoBehaviour

Затем компонент автоматически добавляется, когда вы добавляете свой скрипт в игровой объект

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