Страница 2 из 2

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

СообщениеДобавлено: 09 июл 2020, 13:13
usports
Woland писал(а):Что такое isPoweredOn?

Булевая переменная в скрипте InteractiveLight , который находиться на объекте с тегом onoff.
Я так понимаю должно быть что-то вроде
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

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

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

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

Но оно не работает

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

СообщениеДобавлено: 09 июл 2020, 13:39
Woland
Ну так где ты обращаешься к скрипту InteractiveLight конкретного объекта? У тебя нет такого

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

СообщениеДобавлено: 09 июл 2020, 13:52
usports
Woland писал(а):Ну так где ты обращаешься к скрипту InteractiveLight конкретного объекта? У тебя нет такого

Это разве не обращение ?

Синтаксис:
Используется csharp
   private InteractiveLight lighter;


lighter = GetComponent<InteractiveLight>();

Obj[i].lighter.isPoweredOn = true;
 


Как тогда должно быть?

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

СообщениеДобавлено: 09 июл 2020, 13:53
Woland
Вообще нет.
Obj[i].GetComponent<SomeComponent>().field="ASdad";

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

СообщениеДобавлено: 09 июл 2020, 14:12
usports
Woland писал(а):Вообще нет.
Obj[i].GetComponent<SomeComponent>().field="ASdad";


Спасибо , всё отлично работает.

Только не пойму почему
если
Синтаксис:
Используется csharp
Obj[i].GetComponent<InteractiveLight>().isPoweredOn = true;

Переделать в

Синтаксис:
Используется csharp
private InteractiveLight lighter;

Синтаксис:
Используется csharp
    void Start()
    {
        lighter = GetComponent<InteractiveLight>();
    }

Синтаксис:
Используется csharp
Obj[i].lighter.isPoweredOn = true;

Это так не работает. lighter равен же GetComponent<InteractiveLight>.

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

СообщениеДобавлено: 09 июл 2020, 14:24
Woland
lighter - ссылка на компонент InteractiveLight текущего объекта, откуда ты скрипт делаешь. (код GetComponent<InteractiveLight> - получение компонента текущего объекта).
Тебе же нужна ссылка на компонент каждого отдельного объекта, поэтому получать их надо отдельно.

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

СообщениеДобавлено: 09 июл 2020, 19:11
usports
Woland писал(а):lighter - ссылка на компонент InteractiveLight текущего объекта, откуда ты скрипт делаешь. (код GetComponent<InteractiveLight> - получение компонента текущего объекта).
Тебе же нужна ссылка на компонент каждого отдельного объекта, поэтому получать их надо отдельно.

Многое начинаю понимать.

Вот допустим у меня помимо параметра isPoweredOn есть параметр Switch On (который делает звук зажигания лампы)
Изображение

Я так понимаю что бы его использовать , нужно просто к
Obj[i].GetComponent<InteractiveLight>().isPoweredOn = true;
Добавить

Синтаксис:
Используется csharp
Obj[i].GetComponent<InteractiveLight>().isPoweredOn = true;
Obj[i].GetComponent<InteractiveLight>().SwitchOn <- но дальше не пойму что нужно написать. Это же не bool переменная что бы true или false делать. Да и не нашел параметров типо Play и тд из того что предлагает программа

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

СообщениеДобавлено: 09 июл 2020, 20:20
Woland
Для проигрывания звука есть отдельный встроенный объект AudioSource
https://docs.unity3d.com/ScriptReferenc ... ource.html
https://docs.unity3d.com/ScriptReferenc ... -clip.html

Делаешь AudioSource, на него вешаешь скрипт, который принимает нужный тебе аудио клип и воспроизводит его.