Управление световыми компонентами C # - PullRequest
0 голосов
/ 31 августа 2018

У меня есть игровая механика, в которой игрок может переключать фары автомобиля с помощью клавиши L и подсветки с помощью клавиши S, которая также контролирует движение назад. Это показано в коде ниже.

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

public class headLights : MonoBehaviour {

    private Light frontLight;
    private Light backLight;

// Use this for initialization
void Start () {
    frontLight = GetComponent<Light>();

}

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.L))
    {
        frontLight.enabled = !frontLight.enabled;
    }

    if (Input.GetKeyDown(KeyCode.S))
    {
        backLight = GetComponent<Light>();
        backLight.enabled = !backLight.enabled;
    }
}

}

Проблема в том, что когда я нажимаю L или S, включаются и передний, и задний свет, потому что, как я полагаю, GetComponent ссылается на все дополнительные компоненты Light в сцене и обобщает их как единое целое. Я хочу, чтобы клавиша S включала «задние фонари», пока она нажата, и клавиша L только для переключения «передних фонарей».

МЕТОДЫ, КОТОРЫЕ Я ИСПОЛЬЗУЛ, ЧТОБЫ ПОПРОБОВАТЬ ИСПРАВЛЕНИЕ ПРОБЛЕМЫ

    frontLight = GameObject.Find("Player").GetComponent<Light>();

Этот код просто дает мне ошибки типа "игрок gameobject не имеет каких-либо легких компонентов, прикрепленных к нему (хотя он явно делает) бла-бла-бла.

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

Пожалуйста, помогите мне, если сможете, это сделает мой день ~~:)

Пожалуйста, обратите внимание, что вам не нужно решать всю проблему для меня, если у вас мало времени, просто предоставление общего синтаксиса, который я могу просто поменять, очень мне поможет!

1 Ответ

0 голосов
/ 31 августа 2018

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

Я только что понял, что, вероятно, не имеет смысла.

Допустим, ваша иерархия настроена таким образом, что легкие объекты являются дочерними элементами для автомобиля:

car
+-FrontLight
+-RearLight

Вместо того, чтобы настраивать поведение легких игровых объектов, вы должны поставить его на машину.

Тогда поведение будет выглядеть так:

 public class headLights : MonoBehaviour {

    public Light frontLight;
    public Light backLight;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.L))
    {
        if(frontLight != null) {
            frontLight.enabled = !frontLight.enabled;
        }
    }

    if (Input.GetKeyDown(KeyCode.S))
    {
        if(backLight != null) {
            backLight.enabled = !backLight.enabled;
        }
    }
}

Это потому, что огни не являются компонентами автомобиля, а являются его детьми.

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