我正在尝试制作一个脚本,该脚本将检测我的设定为7的光线的光线投射何时击中了几个不同的对象。一旦物体检测到射线,它将启动我的lerp(颜色在检查器中从alpha(0)-alpha(1)设置)。我已经设置了lerp并检查了它是否在更新功能中运行(确实)。我的目标是,一旦光线击中束缚对象,立即激活束缚。
我尝试浏览文档(ray,raycast,raycasthit等),我发现还必须更改图层,而我的下一个操作步骤是将所有其他对象放在IgnoreRayCast图层上,只是不确定是否最佳或最有效的方式,我也尝试了(https://www.reddit.com/r/Unity3D/comments/6ryx76/raycast_for_activating_objects/)中的一些方法。我是一个刚接触团结的新手,只从事了几个月的编程工作,甚至很难理解如何正确阅读文档以执行中继的内容。任何帮助都将不胜感激,不是听起来太无知,而是外行的话(如果可能)?
(通过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)
{
}
}
}
}
总而言之,我希望具有lerp的物体能够检测到上面带有射线投射的光,以激活存在的lerp。