使用光线投射来自一个物体的多个激光束
Multiple laser beams from one object using raycast
我有一个物体,我想要多束激光束而不是一束激光束。
下面的代码只显示了一个线束的一侧。但双方都期待。
using UnityEngine;
using System.Collections;
public class Laser : MonoBehaviour
{
private LineRenderer lr;
private bool clicked = false;
RaycastHit rh;
// Use this for initialization
void Start()
{
lr = GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update()
{
if (clicked)
{
lr.SetPosition(0, transform.position + new Vector3(0, 0, 0));
RaycastHit hit;
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), -transform.up, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, -transform.up * 5000);
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), transform.up, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, transform.up * 5000);
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), transform.right, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, transform.right * 5000);
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), -transform.right, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, -transform.right * 5000);
}
}
}
public LineRenderer lr_up;
public LineRenderer lr_down;
public LineRenderer lr_left;
public LineRenderer lr_right;
private bool clicked = false;
RaycastHit rh;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (clicked)
{
lr_up.SetPosition(0, transform.position);
lr_down.SetPosition(0, transform.position);
lr_left.SetPosition(0, transform.position);
lr_right.SetPosition(0, transform.position);
RaycastHit hit;
if (Physics.Raycast(transform.position, -transform.up, out hit))
{
if (hit.collider)
{
lr_up.SetPosition(1, hit.point);
}
}
else lr_up.SetPosition(1, -transform.up * 5000);
if (Physics.Raycast(transform.position, transform.up, out hit))
{
if (hit.collider)
{
lr_down.SetPosition(1, hit.point);
}
}
else lr_down.SetPosition(1, transform.up * 5000);
if (Physics.Raycast(transform.position, transform.right, out hit))
{
if (hit.collider)
{
lr_left.SetPosition(1, hit.point);
}
}
else lr_left.SetPosition(1, transform.right * 5000);
if (Physics.Raycast(transform.position, -transform.right, out hit))
{
if (hit.collider)
{
lr_right.SetPosition(1, hit.point);
}
}
else lr_right.SetPosition(1, -transform.right * 5000);
}
}
这是您更正后的代码。您将需要四个线渲染器来表示四个光束。你不能拥有一个线渲染器并期望它在四个方向上拍摄。在当前对象中创建四个空子对象。分配线渲染器组件并在脚本中为它们分配相应的线渲染器。其余代码将负责设置光束。
我有一个物体,我想要多束激光束而不是一束激光束。
下面的代码只显示了一个线束的一侧。但双方都期待。
using UnityEngine;
using System.Collections;
public class Laser : MonoBehaviour
{
private LineRenderer lr;
private bool clicked = false;
RaycastHit rh;
// Use this for initialization
void Start()
{
lr = GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update()
{
if (clicked)
{
lr.SetPosition(0, transform.position + new Vector3(0, 0, 0));
RaycastHit hit;
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), -transform.up, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, -transform.up * 5000);
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), transform.up, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, transform.up * 5000);
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), transform.right, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, transform.right * 5000);
if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), -transform.right, out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
}
}
else lr.SetPosition(1, -transform.right * 5000);
}
}
}
public LineRenderer lr_up;
public LineRenderer lr_down;
public LineRenderer lr_left;
public LineRenderer lr_right;
private bool clicked = false;
RaycastHit rh;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (clicked)
{
lr_up.SetPosition(0, transform.position);
lr_down.SetPosition(0, transform.position);
lr_left.SetPosition(0, transform.position);
lr_right.SetPosition(0, transform.position);
RaycastHit hit;
if (Physics.Raycast(transform.position, -transform.up, out hit))
{
if (hit.collider)
{
lr_up.SetPosition(1, hit.point);
}
}
else lr_up.SetPosition(1, -transform.up * 5000);
if (Physics.Raycast(transform.position, transform.up, out hit))
{
if (hit.collider)
{
lr_down.SetPosition(1, hit.point);
}
}
else lr_down.SetPosition(1, transform.up * 5000);
if (Physics.Raycast(transform.position, transform.right, out hit))
{
if (hit.collider)
{
lr_left.SetPosition(1, hit.point);
}
}
else lr_left.SetPosition(1, transform.right * 5000);
if (Physics.Raycast(transform.position, -transform.right, out hit))
{
if (hit.collider)
{
lr_right.SetPosition(1, hit.point);
}
}
else lr_right.SetPosition(1, -transform.right * 5000);
}
}
这是您更正后的代码。您将需要四个线渲染器来表示四个光束。你不能拥有一个线渲染器并期望它在四个方向上拍摄。在当前对象中创建四个空子对象。分配线渲染器组件并在脚本中为它们分配相应的线渲染器。其余代码将负责设置光束。