기본적으로는 보이지 않다가,
손전등 오브젝트 (Spot Light)로 비추면 보이는 오브젝트가 필요했다.
처음에는 라이트에 스텐실을 짬뽕해서 써야하나 싶었는데, 구글에 검색해보니 원하는 게 있어서 따라해보았다.
참고 사이트
https://www.youtube.com/watch?v=9B4hrQPRqtw
프로토타입으로 구현은 해봤는데, 빛의 밝기나 손전등의 거리는 계산하지 않았다.
벡터로 각도만 계산했다.
보여질 오브젝트
인스펙터에서 스팟 라이트를 연결해준다.
쉐이더도 생성해서 머터리얼을 연결해준다.
RevealObject 스크립트
using UnityEngine;
[ExecuteAlways] // 에디터 모드에서도 실행되어 테스트가 쉽다.
public class RevealObject : MonoBehaviour
{
[SerializeField] Light spotLight;
private Material m_Mat;
private void Start()
{
m_Mat = GetComponent<Renderer>().sharedMaterial;
}
private void Update()
{
m_Mat.SetVector("_MyLightPosition", spotLight.transform.position);
m_Mat.SetVector("_MyLightDirection", -spotLight.transform.forward);
}
}
Reveal 쉐이더
결과
거리, 밝기, 범위는 신경 안쓰고, 오직 각도에만 반응한다.
빛의 크기에 맞게 프로퍼티를 수동으로 맞춰주었다.
제대로 하려면 수식이 많이 복잡해질 것 같다.
'Unity' 카테고리의 다른 글
UniTask 사용하기 (0) | 2022.07.05 |
---|---|
Rigidbody 이동을 애니메이션 클립으로 만들기 (0) | 2022.06.24 |
Grid Layout Center 정렬하기 (0) | 2022.04.21 |
유니티 비주얼 스튜디오 연동 에러? (0) | 2022.04.12 |
DoTween으로 Fade In Out 만들기 (0) | 2022.03.24 |