Назначить gameObject скрипта через другой скрипт? - PullRequest
1 голос
/ 18 марта 2020

Как назначить gameObject одного скрипта через gameObject другого скрипта? Например; Script_1

public class Script_1 : MonoBehaviour
{
    public OVRScript OVR;
}

Script_2

public class Script_2 : MonoBehaviour
{
    private Script_1 src_1;
    public GameObject Front;

  void Start()
    {
        src_1 = (Script_1) GameObject.FindObjectOfType(typeof(Script_1));
        src_1.GetComponent<OVRScript >().OVR = Front //I am facing problem here
    }

}

Оба объекта GameObject "OVR" и "Front" содержат OVRScript

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Я не знаю или не вижу класс OVRScript, но не OVR, а скорее член Script_1?

И тогда вы захотите использовать GetComponent на Front, чтобы прикрепить к нему компонент.

// If possible rather drag your Script_1 in here directly via the Inspector
[SeializeField] private Script_1 src_1;

void Start()
{
    // Now I would use find only as fallback
    if(!scr_1) src_1 = GameObject.FindObjectOfType<Script_1>();

    // then you want to assign the OVR field of the 'src_1' of type 'Script_1'
    // and not use 'src_1.GetComponent<OVRScript>()' which would return
    // the reference of an 'OVRScript' component attached to the same GameObject as the Script_1
    //
    // And you want to fill it with the reference of an 'OVRScript' attached to 'Front'
    src_1.OVR = Front.GetComponent<OVRScript>();
}

(см. [SerializeField])


Было бы еще лучше, если вы прямо определите

public OVRScript Front;

, теперь, если вы перетаскиваете GameObject, он a) проверяется, действительно ли к этому GameObject прикреплен OVRScript, в противном случае вы не можете его сбросить и b) вместо ссылки GameObject ссылка OVRScript уже сериализована и сохранена, так что больше нет необходимости в GetComponent:

[SeializeField] private Script_1 src_1;
public OVRScript Front;

void Start()
{
    // Now I would use find only as fallback
    if(!scr_1) src_1 = GameObject.FindObjectOfType<Script_1>();

    src_1.OVR = Front;
}
1 голос
/ 18 марта 2020
src_1.GetComponent<OVRScript>().OVR = Front.GetComponent<OVRScript>().OVR;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...