Laser Pointer
Demonstration
위처럼 레이저 포인터를 구현할 것이다. LineRenderer 를 이용해 구현할 것이다.
Line Renderer
Laser Prefab 을 따로 만들어서 Line Renderer 와 LaserRenderer 스크립트를 추가했다.
- LaserRenderer 의 내용은 별 거 없다. start, end 값을 설정해주면 LineRenderer 의 Position 값을 변경해준다.
- OnEnable OnDisable 을 통해 자신이 Enable / Disable 되었을 때 LineRenderer 도 같이 적용되게 하였다.
public class LaserRenderer : MonoBehaviour
{
public Vector3 start;
public Vector3 end;
private LineRenderer laserLine;
void Start()
{
laserLine = GetComponent<LineRenderer>();
}
void Update()
{
laserLine.SetPosition(0, start);
laserLine.SetPosition(1, end);
}
private void OnEnable()
{
if (!laserLine) return;
laserLine.enabled = true;
}
private void OnDisable()
{
if (!laserLine) return;
laserLine.enabled = false;
}
}
start, end 값 설정은 RobotAimController 에서 진행한다.
public class RobotAimController : MonoBehaviour
{
private LaserRenderer laserRenderer;
...
public Transform laserStartPoint;
void Start()
{
laserRenderer = transform.root.gameObject.GetComponentInChildren<LaserRenderer>();
...
}
void FixedUpdate()
{
...
laserRenderer.enabled = inputHandler.isAim;
laserRenderer.start = laserStartPoint.position;
laserRenderer.end = laserRenderer.start + laserStartPoint.forward * 100;
Ray laserRay = new Ray(laserRenderer.start, laserStartPoint.forward);
Physics.Raycast(laserRay, out RaycastHit laserHit, 100);
if (laserHit.collider)
{
laserRenderer.end = laserHit.point;
}
}
}
Physics.Raycast 를 이용해 Hit 된 곳을 end 값으로 지정한다.
- start 값은 총기 모델의 laserStart Transform 값을 사용했다.
- laserStartPoint.forward 을 Direction 으로 사용해 총기의 Rotation 에 따라 바뀐 Direction 으로 직진하게 만들었다.
(↓ 총기 Rotation 이 바뀌어도 총기 방향이랑 평행하게 직진한다. )