Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 21.08.2020
Сообщений: 112

Как сделать выключаемый факел

15.10.2020, 18:16. Показов 2353. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте , делаю 2д проект . Хочу реализовать возможность "тушить свет". Вообщем есть факел он дает свет и есть игрок (свет реализовал через point light) . Что должно происходить , игрок подходит к факелу нажимает "E" и значение intensity в компоненте Light у факела становиться равно 0 (вообщем оно равно 1.3) .

Как я это реализовал -
Вот часть скрипта (на игроке)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private Torch torch;
 
void Start() 
    {
 
        torch = gameObject.GetComponent<Torch>();
    }
 
void OnTriggerStay2D(Collider2D other)
    {
        if (other.tag == "Torch") 
        {
            if (Input.GetKeyDown (KeyCode.E)) 
            {
                torch.intensity = 0f ;
            }
        }
    }
Вот код который весит на факеле
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Torch : MonoBehaviour 
{
    private Light lt;
 
    public float intensity;
 
    void Start () 
    {
        lt = GetComponent<Light>();
 
        lt.intensity = 1.3f ;
    }
 
    private SpriteRenderer sprite;
    void Awake()
    {
        sprite = GetComponent<SpriteRenderer>(); 
    }
 
    void Update () 
    {
 
    }
 
 
}
Почему скрипт не работает? . В скрипте игрока я обратился к скрипту "Torch", при нажатие клавише Е должно происходить изменение значения intensity . Сейчас ничего не происходит ( в инспекторе факела появилось значение intensity , но оно равно нулю и при его изменение ничего не происходит)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2020, 18:16
Ответы с готовыми решениями:

Изобразить олимпийский факел
Здравствуйте форумчане! Рада Вас приветствовать! У меня к Вам просьба! Я обладаю минимальным запасом знаний в программе Delphi, мне...

При запуске игр отключается монитор,а сам компьютер входит в не выключаемый режим сна!
Все началось месяц назад.Железо у меня новое и неплохое.Geforce GTX 660 Intel i7 4740 8 гб оперативки.Ну вот я играл в Total war Atilla как...

Как сделать передвижение квадрата в Unity 2d Как сделать так что бы он двигался как в игре Read BAll 4
Помогите с передвижением квадрата в Unity 2d Как сделать так что бы он двигался как в игре Read BAll 4. Чтобы получается он перекатывался....

6
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
15.10.2020, 19:31
Дело в том, что ваша переменная
public float intensity;
совершенно ни как не связана с интенсивностью света
lt.intensity
это ведь два совершенно разных объекта.
0
1 / 1 / 0
Регистрация: 21.08.2020
Сообщений: 112
15.10.2020, 19:33  [ТС]
Я уже менял lt.intensity на просто intensity. Но проблема не решилась
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
15.10.2020, 19:46
У вас и подход немного странный. На игроке разве висит скрипт факела? Вот здесь вы ведь пытаетесь получить ссылку на скрипт факела, который находится на игроке
C#
1
torch = gameObject.GetComponent<Torch>();
А вам нужно получить ссылку на скрипт факела из самого факела, то-есть когда вы находится в триггере факела и нажимаете клавишу E, то вам нужно именно из объекта other получить скрипт факела, то-есть примерно так
C#
1
2
3
4
if (Input.GetKeyDown (KeyCode.E)) 
  {
    other.gameObject.GetComponent<Torch>().lt.intensity = 0; 
  }
0
1 / 1 / 0
Регистрация: 21.08.2020
Сообщений: 112
15.10.2020, 19:54  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
void OnTriggerStay2D(Collider2D other)
    {
        if (other.tag == "Torch") 
        {
            if (Input.GetKeyDown (KeyCode.E)) 
            {
                other.gameObject.GetComponent<Torch>().lt.intensity = 0;
            }
        }
    }
Выдает данную ошибку - NullReferenceException: Object reference not set to an instance of an object
Move.OnTriggerStay2D (UnityEngine.Collider2D other) (at Assets/Scripte/Move.cs:102)

Добавлено через 4 минуты
А все понял , спасибо большое код работает . Остался только один вопрос , как сделать так чтобы при втором нажатие на Е значение снова становилось 1,3
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
15.10.2020, 20:20
Лучший ответ Сообщение было отмечено Medoed как решение

Решение

Цитата Сообщение от Medoed Посмотреть сообщение
Остался только один вопрос , как сделать так чтобы при втором нажатие на Е значение снова становилось 1,3
Сделайте проще и создайте в скрипте факела метод, который будет зажигать и гасить факел, это может выглядеть примерно вот так (скрипт факела):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Torch : MonoBehaviour 
{
    private bool _isLightOn=true;
    private Light lt;
 
    void Start () 
    {
        lt = GetComponent<Light>();
        lt.intensity = 1.3f;
    }
 
   
    public void ToggleLight()
    {
        _isLightOn = !_isLightOn;
        if(_isLightOn) lt.intensity = 1.3f;
        else lt.intensity = 0f;
    }
 
}
Тогда в скрипте игрока, вы можете просто вызывать это метод у факела и он уже сам будет переключаться между светом и тьмой (в скрипте игрока)
C#
1
2
3
4
5
6
7
8
9
10
void OnTriggerStay2D(Collider2D other)
    {
        if (other.tag == "Torch") 
        {
            if (Input.GetKeyDown (KeyCode.E)) 
            {
                other.gameObject.GetComponent<Torch>().ToggleLight(); 
            }
        }
    }
Код написан в браузере, поэтому возможны опечатки. Но здесь главное идея.
1
1 / 1 / 0
Регистрация: 21.08.2020
Сообщений: 112
15.10.2020, 20:38  [ТС]
Все работает , большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2020, 20:38
Помогаю со студенческими работами здесь

Как сделать задание я вообще не знаю как его сделать, если сделаете, скиньте архивом пожалуйста)
Как сделать задание я вообще не знаю как его сделать, если сделаете, скиньте архивом пожалуйста))) Разработать приложение, которое...

В упор не понимаю как сделать столкновение персонажа с объектами. Как мне это сделать?
//Source.cpp #include &lt;SFML/Graphics.hpp&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &quot;map.h&quot; using namespace sf; using...

Как сделать,у меня сервер обычная XP,как мне правильно сделать так,что бы некоторые компы отрезать от инета,но не от базы данных(К+ и 1С и т.п)
Система токая,инет идет на модем,с модема идет на хаб,с хаба на всех??? какой прогой лучше воспльзываться?? если есть возможнасть то...

Как сделать перемещение нескольких файлов с заменой? И как это сделать проще?
Как сделать перемещение нескольких файлов с заменой? Например я ввожу в текстбокс название файлов, потом эти файлы переношу в...

Как сделать модель движения заряженной частицы в однородном магнитном поле? И как сделать эту модель визуально видимой?
Для проекта в школе нужно создать компьютерную модель движения заряженной частицы в однородном магнитном поле. Я не силён в созданиях...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru