Я пытаюсь создать скрипт, который будет определять, когда мой свет с установленным диапазоном 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)
{
}
}
}
}
в общем, я хочу, чтобы мой объект, у которого есть рычажок, обнаружил мой свет с лучевым излучением на нем, чтобыактивируйте имеющийся у меня лерп.