Fade In Out 기능을 만들어야 했는데, 보기 편하도록 DoTween을 사용해보았다.
구현
싱글톤을 사용하지 않고, 조금 더 쓰기 편하도록 Static으로 처리했다. (instance 안 적으려고.)
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
public class TransitionController : MonoBehaviour
{
// 싱글톤 대신 static 쓰기 위해, 이러한 방법 사용.
// 인스펙터에서 수정할 값.
[SerializeField] private Image blackBack; // 화면 꽉 채운 이미지 컴포넌트. (검은색.)
[SerializeField] private float time = 1.0f;
// 실제 Static 메소드에서 사용할 값.
static private Image BlackBack;
static private float Time;
static Sequence sequenceFadeInOut;
private void Awake()
{
BlackBack = blackBack;
Time = time;
BlackBack.enabled = false;
}
private void Start()
{
// 구성.
sequenceFadeInOut = DOTween.Sequence()
.SetAutoKill(false) // DoTween Sequence는 기본적으로 일회용임. 재사용하려면 써주자.
.OnRewind(() => // 실행 전. OnStart는 unity Start 함수가 불릴 때 호출됨. 낚이지 말자.
{
BlackBack.enabled = true;
})
.Append(BlackBack.DOFade(1.0f, Time)) // 어두워짐. 알파 값 조정.
.Append(BlackBack.DOFade(0.0f, Time)) // 밝아짐. 알파 값 조정.
.OnComplete(() => // 실행 후.
{
BlackBack.enabled = false;
});
}
static public void Play(GlobalValue.Transition transition)
{
switch(transition)
{
case GlobalValue.Transition.Fade: FadeInOut(); break;
}
}
static private void FadeInOut()
{
sequenceFadeInOut.Restart(); // Play()로 하면, 한번 밖에 실행 안 됨.
}
}
GlobalValue에서 나중에 쉽게 구분할 수 있도록 분리함.
public class GlobalValue
{
public enum Transition
{
Fade,
}
}
사용
테스트용으로 스크립트를 만들었다.
using UnityEngine;
public class TransitionTest : MonoBehaviour
{
[Header("테스트 플레이 키.")]
public KeyCode keyCode = KeyCode.RightArrow;
private void Update()
{
// 오른쪽 화살표 키 누르면 Fade 효과 테스트 가능.
// Sumulation 에서는 작동 안 함.
if (Input.GetKeyDown(keyCode))
{
TransitionController.Play(GlobalValue.Transition.Fade);
}
}
}
'Unity' 카테고리의 다른 글
Grid Layout Center 정렬하기 (0) | 2022.04.21 |
---|---|
유니티 비주얼 스튜디오 연동 에러? (0) | 2022.04.12 |
정규식으로 휴대폰 번호에 하이픈(hyphen) - 추가하기 (0) | 2022.01.13 |
[Unity] 문자열에서 HTML 태그 제거하기 (0) | 2021.10.28 |
[포톤] 직접 예제 만들어보기 (PunRPC 사용하기) (2) | 2021.10.05 |