본 개발노트는 혼자서 유니티 게임개발 독학하는 과정에서
유용하게 사용될만한 요소들을 구현 방법과 함께 기록&공유하는 게시글이며
부족한점이 있을 수 있어 참고해서 봐주시면 감사하겠습니다
게임안에서 깜빡거리는 요소들이 자주 등장합니다
제가 현재 개발하고있는 게임에서도 필요해서 구현을 하게 되어서 velog에 공유해보려 합니다
구현에 사용된 Sprite는 현재 개발하고있는 게임에 사용된 Sprite를 사용했습니다
저희 팀원이 디자인한거 무단으로 사용해보았습니다ㅎㅎ;
버튼을 누르면 깜빡거림이 시작하는 기믹을 넣어보았습니다
그럼 구현 과정에 대해서 설명드리겠습니다
전체 생성한 오브젝트와 스크립트입니다
오브젝트: BlinkObject(Image), BlinkButton(Button), BlinkManager(Empty
스크립트: ButtonImage, ImageBlink
ButtonImage
스크립트는 기능이랑 관련없이 버튼이미지 바꾸려고 추가한겁니다!
UI를 작업하는거라 Canvas 상에서 구현을 했습니다
ImageBlink 전체코드 입니다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ImageBlink : MonoBehaviour
{
[SerializeField]
private GameObject blinkObject;
private Color orgColor;
private bool check;
public void Awake()
{
check = false;
orgColor = new Color(1f, 1f, 1f, 1f);
}
public void SetBlink()
{
if (!check)
{
StartCoroutine("Blink", blinkObject);
check = true;
}
else
{
StopCoroutine("Blink");
blinkObject.GetComponent<Image>().color = orgColor;
check = false;
}
}
private IEnumerator Blink(GameObject gameObject)
{
Color tempColor = orgColor;
gameObject.GetComponent<Image>().color = tempColor;
while (true)
{
while (gameObject.GetComponent<Image>().color.a > 0f)
{
tempColor.a -= 0.1f;
gameObject.GetComponent<Image>().color = tempColor;
yield return new WaitForSeconds(0.05f);
}
yield return new WaitForSeconds(0.5f);
while (gameObject.GetComponent<Image>().color.a < 1f)
{
tempColor.a += 0.1f;
gameObject.GetComponent<Image>().color = tempColor;
yield return new WaitForSeconds(0.05f);
}
yield return new WaitForSeconds(0.5f);
}
}
}
Button을 클릭시 SetBlink가 호출되고 SetBlink에선 코루틴으로 Blink 함수를 실행합니다
코드가 동작하는 방법은 다음과 같습니다
Blink
로 전달된 gameObject
의 알파값(a)을 스크립트 상에서 조절합니다gameObject
의 알파값이 0보다 클경우 0.1f값씩 줄여나가고 0보다 작을경우 0.1f씩 증가시킵니다tempColor.a -= 0.1f;
gameObject.GetComponent<Image>().color = tempColor;
위와같이 Color
값을 변경하는 이유는
gameObject.GetComponent<Image>().color.a -= 0.1f
이런식으로 a값에 바로 접근할수 없기 때문입니다(다음과 같은 오류 발생)
값이 모두 변경되었을때 다음 동작을 실행하기까지 0.5f의 텀을 두고 무한루프를 실행합니다
Blink Manager
에 ImageBlink
스크립트를 Add Component
를 하고 BlinkObject
에 깜빡거릴 오브젝트를 추가합니다
OnClick()
에 BlinkManager
를 추가하고 해당 스크립트의 SetBlink
함수를 설정합니다
OnClick()의 첫번째는 기능과 관련이 없습니다!
while
문을 조건문으로 상황에 맞게 좀더 추가할 수 있을거 같습니다GameObject
를 전달하지 않고 전역변수로 바로 변경할 수 있습니다[SerializeField]
는 private
으로 하여도 유니티 프로젝트와 직렬화를 시켜 오브젝트를 추가할 수 있어 유용하게 사용할 수 있습니다~Manager
를 생성해서 사용하면 편하게 구현이 가능한거 같습니다WaitForSeconds()
안에 float
값을 조정하면 깜빡거리는 속도를 조정할 수 있습니다 이상으로 깜빡거리는 오브젝트 구현에 대해서 포스팅 해보았습니다
궁금하신 점이 있으시면 댓글 남겨주시면 감사하겠습니다!!🙇