Ссылка на объект из другого скрипта

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Ссылка на объект из другого скрипта

Сообщение usports 08 июл 2020, 13:54

Уже битый час бьюсь над этим , прочитав и посмотрев много видео всё равно не понимаю как это работает.
Я хочу свойства объекта из одного скрипта использовать в другом. При этом скрипты находятся на разных объектах.

Хочу public GameObject Object;(допустим туда поставил point light) из одного скрипта , в другом скрипте задать ему другой цвет. Но почему-то не получается
И можно как-то избавить от перетаскивания объекта в _uiPanel;
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HellTwo : MonoBehaviour
{
    public GameObject Object;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
       
    }
}


Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HellOne : MonoBehaviour
{
    [SerializeField]
    private GameObject _uiPanel;
    private HellTwo _levelScript;

    private void Start()
    {
        _levelScript = _uiPanel.GetComponent<HellTwo>();
    }

    public void SomeMethod()
    {
        _levelScript.Object = new Color(1f, 2f, 3f);
    }
}
 
Только начал изучать unity и C# , если что-то называю не так или не своими именами , то сорян)
usports
UNец
 
Сообщения: 34
Зарегистрирован: 02 июл 2020, 19:13

Re: Ссылка на объект из другого скрипта

Сообщение Saltant 08 июл 2020, 14:35

А документацию к движку открыть слабо? https://docs.unity3d.com/ScriptReferenc ... .Find.html
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Ссылка на объект из другого скрипта

Сообщение usports 08 июл 2020, 14:56

Saltant писал(а):А документацию к движку открыть слабо? https://docs.unity3d.com/ScriptReferenc ... .Find.html

GameObject.Find нагружает лишний раз движок
К тому же там используется один и тот же скрипт "ExampleClass"
Последний раз редактировалось usports 08 июл 2020, 15:05, всего редактировалось 1 раз.
Только начал изучать unity и C# , если что-то называю не так или не своими именами , то сорян)
usports
UNец
 
Сообщения: 34
Зарегистрирован: 02 июл 2020, 19:13

Re: Ссылка на объект из другого скрипта

Сообщение Woland 08 июл 2020, 15:00

Тебе нужен компонент Light.
https://docs.unity3d.com/ru/2019.4/Manu ... Light.html
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Ссылка на объект из другого скрипта

Сообщение usports 08 июл 2020, 15:09

Woland писал(а):Тебе нужен компонент Light.
https://docs.unity3d.com/ru/2019.4/Manu ... Light.html

Я пробовал поменять
Синтаксис:
Используется csharp
public GameObject Object;

на
Синтаксис:
Используется csharp
public Light Object;

Толку не дало
Только начал изучать unity и C# , если что-то называю не так или не своими именами , то сорян)
usports
UNец
 
Сообщения: 34
Зарегистрирован: 02 июл 2020, 19:13

Re: Ссылка на объект из другого скрипта

Сообщение Woland 08 июл 2020, 16:53

Что толку не дало? Ошибка или что? Код какой?
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Ссылка на объект из другого скрипта

Сообщение usports 08 июл 2020, 17:13

Woland писал(а):Что толку не дало? Ошибка или что? Код какой?

Ругается на
"не удаётся неявно преобразовать тип int UnityEngine.Color в UnityEngine.Light
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HellTwo : MonoBehaviour
{
    public Light Object;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
       
    }
}


Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HellOne : MonoBehaviour
{
    [SerializeField]
    private GameObject _uiPanel;
    private HellTwo _levelScript;

    private void Start()
    {
        _levelScript = _uiPanel.GetComponent<HellTwo>();
    }

    public void SomeMethod()
    {
        _levelScript.Object = new Color(1f, 2f, 3f);
    }
}
 
Только начал изучать unity и C# , если что-то называю не так или не своими именами , то сорян)
usports
UNец
 
Сообщения: 34
Зарегистрирован: 02 июл 2020, 19:13

Re: Ссылка на объект из другого скрипта

Сообщение Woland 08 июл 2020, 19:05

ясен пень. Тебе нужно менять свойство color объекта, а не сам объект.
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Ссылка на объект из другого скрипта

Сообщение usports 08 июл 2020, 19:52

Woland писал(а):ясен пень. Тебе нужно менять свойство color объекта, а не сам объект.

А как тогда будет выглядеть эта строчка
Синтаксис:
Используется csharp
 _levelScript.Object = new Color(1f, 2f, 3f);
в обращении к свойству
Только начал изучать unity и C# , если что-то называю не так или не своими именами , то сорян)
usports
UNец
 
Сообщения: 34
Зарегистрирован: 02 июл 2020, 19:13

Re: Ссылка на объект из другого скрипта

Сообщение Woland 09 июл 2020, 00:20

свойство - color
_levelScript.Object.color = new Color(1f, 2f, 3f);
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Ссылка на объект из другого скрипта

Сообщение usports 09 июл 2020, 01:21

Woland писал(а):свойство - color
_levelScript.Object.color = new Color(1f, 2f, 3f);

Получилось , спасибо . Вот теперь другой вопрос появился.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Trigger1 : MonoBehaviour
{

    //public Light one;
    //public Light one1;
    //public Light one2;
    //public Light one3;
    //public Light one4;
    //public Light one5;
    //public Light one6;
    //public Light one7;
    //public Light one8;


    [SerializeField]
    private GameObject Obj;
    private InteractiveLight lighter;

    // Start is called before the first frame update
    void Start()
    {
        lighter = Obj.GetComponent<InteractiveLight>();
    }

    // Update is called once per frame
    void Update()
    {

    }

    private void OnTriggerEnter(Collider other)
    {
        StartCoroutine(coroutine ());
    }

    IEnumerator coroutine()
    {

        yield return new WaitForSeconds(0.5f);
        lighter.isPoweredOn = true;

        //yield return new WaitForSeconds(0.5f);
        //one.enabled = true;

        //yield return new WaitForSeconds(0.5f);
        //one1.enabled = true;

        //yield return new WaitForSeconds(0.5f);
        //one2.enabled = true;

        //yield return new WaitForSeconds(0.5f);
        //one3.enabled = true;

        //yield return new WaitForSeconds(0.5f);
        //one4.enabled = true;

        //yield return new WaitForSeconds(0.5f);
        //one5.enabled = true;



    }


Тут lighter обращается к isPoweredOn из скрипта InteractiveLight, всё отлично работает. Но мне нужно 10 таких объектов. Не думаю что такой код ниже должен быть.
Наверно нужно создавать чисто GameObject, а параметр lighter сделать единым для всех,но как ?

Синтаксис:
Используется csharp
    public GameObject Obj;
    public GameObject Obj1;
    public GameObject Obj2;  
    public GameObject Obj3;
    public GameObject Obj4;
    и тд
   private InteractiveLight lighter
   private InteractiveLight1 lighter
   private InteractiveLight2 lighter
   private InteractiveLight3 lighter
   private InteractiveLight4 lighter
   и тд
    lighter = Obj.GetComponent<InteractiveLight>();
    lighter1 = Obj1.GetComponent<InteractiveLight>();
    lighter2 = Obj2.GetComponent<InteractiveLight>();
    lighter3 = Obj3.GetComponent<InteractiveLight>();
    lighter4 = Obj4.GetComponent<InteractiveLight>();
    и тд
    yield return new WaitForSeconds(0.5f);
    lighter.isPoweredOn = true;
    yield return new WaitForSeconds(0.5f);
    lighter1.isPoweredOn = true;
    yield return new WaitForSeconds(0.5f);
    lighter2.isPoweredOn = true;
    yield return new WaitForSeconds(0.5f);
    lighter3.isPoweredOn = true;
    yield return new WaitForSeconds(0.5f);
    lighte4r.isPoweredOn = true;
    и тд
Только начал изучать unity и C# , если что-то называю не так или не своими именами , то сорян)
usports
UNец
 
Сообщения: 34
Зарегистрирован: 02 июл 2020, 19:13

Re: Ссылка на объект из другого скрипта

Сообщение Saltant 09 июл 2020, 01:33

usports писал(а):
Saltant писал(а):А документацию к движку открыть слабо? https://docs.unity3d.com/ScriptReferenc ... .Find.html

GameObject.Find нагружает лишний раз движок
К тому же там используется один и тот же скрипт "ExampleClass"

Ну дааа, нагрузит так шо фипиэс просадит, несколько наносекунд это слишкам многа :)
P.S Если скрипт перекинет на другой GO то уже в любом случае искать объект, а если этот GO создается данамически как ты в него ссылку вкорячешь в редакторе например? Так что нечего ссать метода Find, вы тут ни триплЭй проекты лепите.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Ссылка на объект из другого скрипта

Сообщение Woland 09 июл 2020, 11:16

Смотри, что такое массивы
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Ссылка на объект из другого скрипта

Сообщение usports 09 июл 2020, 12:39

Woland писал(а):Смотри, что такое массивы

Синтаксис:
Используется csharp
Сделал по другому

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Trigger2 : MonoBehaviour
{
    public GameObject[] Obj;
    // Start is called before the first frame update
    void Start()
    {
        Obj = GameObject.FindGameObjectsWithTag("onoff");
    }

    // Update is called once per frame
    void Update()
    {
       
    }

    private void OnTriggerEnter(Collider other)
    {
        for (int i = 0; i <= Obj.Length - 1; i++)
        {
            Obj[i].isPoweredOn = true;
        }
    }
}
 

Он не понимает что такое isPoweredOn , нужным объектам выдал тег onoff.
Чего тут не хватает?
Только начал изучать unity и C# , если что-то называю не так или не своими именами , то сорян)
usports
UNец
 
Сообщения: 34
Зарегистрирован: 02 июл 2020, 19:13

Re: Ссылка на объект из другого скрипта

Сообщение Woland 09 июл 2020, 12:52

Что такое isPoweredOn?
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27