반응형
유니티 버전 : 2020.3.25f1(URP)
작업환경 : Mac (Monterey 12.3.1)
이번엔 레이저 반사에 대해서 해보려 합니다.
아래 사진처럼 부딫힌 곳이 있으면 튕겨져 나가는 기능을 구현합니다.

시작 지점에서 라인렌더러를 그리고 부딫힌 부분에서 다시 라인렌더러를 그리는 작업을 반복 합니다. 부딫힐 떈, Vector3.Reflect를 이용해 반사되는 방향을 구해줍니다.
LaserReflect.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LaserReflect : MonoBehaviour
{
public int MaxBounce = 5;
public LineRenderer lr;
public Transform StartPoint;
public bool ReflectOnlyMirror;
// Start is called before the first frame update
void Start()
{
lr.positionCount = MaxBounce;
}
// Update is called once per frame
void Update()
{
CastLaser(StartPoint.position, -StartPoint.forward);
}
void CastLaser(Vector3 position, Vector3 direction)
{
lr.SetPosition(0, StartPoint.position);
for(int i = 0; i < MaxBounce-1; i++)
{
Ray ray = new Ray(position, direction);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 300, 1))
{
position = hit.point;
direction = Vector3.Reflect(direction, hit.normal);
lr.SetPosition(i + 1, hit.point);
if(hit.transform.name != "Mirror" && ReflectOnlyMirror)
{
for(int j = (i+1); j <= MaxBounce; j++)
{
lr.SetPosition(j, hit.point);
}
break;
}
}
}
}
}
아래의 유튜브 영상을 보고 조금 수정해서 작성했습니다.
https://www.youtube.com/watch?v=NKg3OduB9Lg
LaserReflect.unitypackage
0.01MB
반응형
'유니티' 카테고리의 다른 글
Unity HexGrid (0) | 2022.05.16 |
---|---|
유니티 동영상 재생 + Youtube(유료 에셋) (0) | 2022.04.21 |
유니티 PlanarReflection (0) | 2022.04.20 |
유니티 오브젝트 움직임 구현 (0) | 2022.04.14 |
유니티 에셋 번들 사용법(Unity AssetBundle) (0) | 2022.04.07 |