

몬스터 오브젝트 하위에 UI Canvas 있고, 이 하위에는 QuestionMark 오브젝트가 있으며, Image와 Animator 컴포넌트를 보유중
한줄 요약
특정 조건이 만족 되면, 숨겨놓은
Image를 팝업 하고, 애니메이션을 1회 재생하고 다시 숨긴다.
다만 이 과정에서 애니메이션을 항상 초기화 시키고,
조건 성립 때마다 애니메이션의 처음부터 재생되어야 함
A. 현재 트러블
조건에 의해 작동 될 때,
QuestionMark오브젝트의Animation이 처음부터 제대로 재생되지 않고 이미지의 중간 즈음에서 멈춰 있다.
평상시에는 QuestionMark라는 이미지는 보이지 않음
(완료)
OnTriggerEnter2D 작동 시 QuestionMark라는 이미지가 보임 (스크립트로 구현 완료)
수정 되어야 할 부분
3.
QuestionMark의Animator가 작동하면서 미리 설정해둔Question이라는 애니메이션이 이미지 애니메이션의 처음부터 끝까지 1회만 재생됨
다음에 다시 작동할 수 있도록 애니메이션 단계 초기화
QuestionMark 이미지는 다시 사라짐 Animator 클래스의 Play()와 Rebind()를 사용하여 애니메이션을 원하는 시점에서 재생하고, 초기화하는 로직을 구현.
위 메서드들의 매개 변수에 대한 자세한 설명은 코드 이미지나, 주석 참조

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ColliderMark : MonoBehaviour
{
public Image questionMark; // 물음표 이미지
public Animator questionMarkAnimator; // 물음표 이미지에 대한 Animator 컴포넌트
void Start()
{
if (questionMark != null)
{
questionMark.enabled = false; // 물음표 이미지 비활성화
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
// 물음표 마크 오브젝트의 콜라이더, 플레이어와 충돌했는지 확인
if (collision.CompareTag("Player") && questionMark != null)
{
questionMark.enabled = true; // 물음표 이미지 활성화
if (questionMarkAnimator != null)
{
// Animator 컴포넌트를 사용하여 애니메이션을 제어
questionMarkAnimator.Rebind(); // Animator 컴포넌트 상태 초기화(처음으로)
questionMarkAnimator.Play("Question", -1, 0f);
// "Question" 이라는 애니메이션 / -1 : 레이어(-1은 모든 레이어) / 0f : 애니메이션(시간)의 처음부터.
// 요약 : 첫 프레임부터 재생한다
}
StartCoroutine(DeactivateImage(questionMark, questionMarkAnimator, 1.0f));
// 지정된 시간 1초 후에 이미지와 애니메이션을 비활성화
}
}
private IEnumerator DeactivateImage(Image image, Animator animator, float delay) // 매개변수 - 이미지 / 애니메이터 / 지정 시간
{
yield return new WaitForSeconds(delay);
if (animator != null)
{
animator.Rebind(); // 애니메이터 상태 리셋
}
image.enabled = false; // 이미지를 비활성화
}
}
questionMark 이미지와 questionMarkAnimator 애니메이터에 대한 참조함.
플레이어가 콜라이더와 충돌하면, 이미지가 활성화되고 애니메이션이 재생 됨.
이 후, Coroutine을 활용하여 지정된 지연 시간(1초) 후에 이미지와 애니메이션을 비활성화
Rebind 메서드는 애니메이터의 상태를 초기화하고, Play 메서드는 우리가 설정한 시간 0f(초)에 따라 애니메이션을 처음부터 재생한다.

QuestionMark 오브젝트의 Image, Animotor를 스크립트가 참조할 수 있도록 각각 연결해준다. 
물음표 마크의 애니메이션이 잘 재생되고 있다.
이후 목표는
1. 물음표 마크 로직 작동 (감정 표현) 위에서 구현 완료
2. 상호 작용
3. 상호 작용 끝나고 보여주고 싶은 다른 이미지 기능을 프로그래밍해야 한다.