Объект обнаружил мой свет RayCast и активировал Лерп - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать скрипт, который будет определять, когда мой свет с установленным диапазоном 7, его лучевая передача, попадает в несколько различных объектов.Как только объект обнаружит луч, он запустит мой lerp (цвета устанавливаются в инспекторе из alpha (0) -alpha (1)).Я настроил свой lerp и проверил, работает ли он в функции обновления (так и есть).Теперь моя цель - активировать lerp только после того, как луч достигнет объекта, на котором включен lerp.

Я попытался просмотреть документацию (ray, raycast, raycasthit и т. Д.), Я также увидел необходимость менять слои, и мой следующий ход действий состоял в том, чтобы все другие объекты на слое IgnoreRayCast просто не были увереныесли это лучший или самый эффективный способ, я также попробовал кое-что из (https://www.reddit.com/r/Unity3D/comments/6ryx76/raycast_for_activating_objects/). Я очень плохо знаком с Unity и программирую только несколько месяцев, мне трудно даже понять, как читать документациюправильно выполнить то, что передается. Любая помощь будет очень полезна, чтобы не звучать слишком невежественно, но, если возможно, с точки зрения неспециалистов?

(скрипт для объекта, проходящего через lerp)

public class enumLight : MonoBehaviour
{
    public float speed = 1;
    public Color startColor;
    public Color endColor;
    float startTime;
    // Start is called before the first frame update

    void Start()
    {
        startTime = Time.time;
    }

    // Update is called once per frame
    void Update()
    {
        RaycastHit hit;
        float t = (Time.time - startTime) * speed;
        GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, t);
        //Debug.Log(Color.Lerp(startColor, endColor, t));
        //Debug.Log(hit.transform.name);

        //hitByray();
    }
    void hitByray()
    {
        Debug.Log("I was hit");
    }
}

(сценарий от моего света о включении лучевого вещания)

//hold the camera
    public Camera lightRay;
    //camera range for raycast
    public float lightRange = 7f;
    //reference the puzzle
    public GameObject LightBox;
    LightPuzzle lightPuzzle;



    // Start is called before the first frame update
    void Start()
    {
        lightPuzzle = LightBox.GetComponent<LightPuzzle>();

    }

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

    }

    void shoot()
    {
        RaycastHit hit;

        if (Physics.Raycast(transform.position, -Vector3.up, out hit))
        {
            hit.transform.SendMessage("hitByRay");
        }

    if (Physics.Raycast(lightRay.transform.position, lightRay.transform.forward, out hit, lightRange))
    {
       Debug.Log(hit.transform.name);
        if (hit.distance < lightRange)
        {

        }
    }
}

}

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

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