반응형
SMALL

using System.Collections;
using UnityEngine;
public class ChestControll : MonoBehaviour
{
public enum ChestType
{
Wood,
Iron,
Gold,
Diamond
}
public ChestType Type;
public Transform playerTrans;
public float blinkInterval = 0.1f; // 깜빡임 간격
public float fadeOutTime = 1.0f; // 사라지는 시간
public float minDist = 1.0f; // 열리게 하기 위한 거리
private Animator animator;
private SpriteRenderer spriteRenderer;
private float blinkTime = 0.0f; // 다음 깜빡임까지 남은 시간
private float fadeOutTimer = 0.0f; // 사라지는 시간 측정용 타이머
private void Awake()
{
this.animator = GetComponent<Animator>();
this.spriteRenderer = GetComponent<SpriteRenderer>();
switch (this.Type)
{
case ChestType.Wood:
this.animator.SetInteger("state", 0);
break;
case ChestType.Iron:
this.animator.SetInteger("state", 2);
break;
case ChestType.Gold:
this.animator.SetInteger("state", 4);
break;
case ChestType.Diamond:
this.animator.SetInteger("state", 6);
break;
}
}
private void Update()
{
var dist = Vector2.Distance(this.transform.position, this.playerTrans.position);
if (dist < this.minDist)
{
this.Open();
}
}
private void Open()
{
switch (this.Type)
{
case ChestType.Wood:
this.animator.SetInteger("state", 1);
break;
case ChestType.Iron:
this.animator.SetInteger("state", 3);
break;
case ChestType.Gold:
this.animator.SetInteger("state", 5);
break;
case ChestType.Diamond:
this.animator.SetInteger("state", 7);
break;
}
this.StartCoroutine(this.Dissapear());
}
private IEnumerator Dissapear()
{
Color color = this.spriteRenderer.color;
yield return new WaitForSeconds(1f);
while (true)
{
// 알파값 조절
color.a = 1.0f - this.fadeOutTimer / this.fadeOutTime;
this.spriteRenderer.color = color;
//깜빡이는 시간 간격 조절
this.blinkTime -= Time.deltaTime;
if (this.blinkTime <= 0.0f)
{
//스프라이트 렌더러가 활성화 되어 있다면 비활성화 (아닐경우 반대로 활성화)
this.spriteRenderer.enabled = !this.spriteRenderer.enabled;
//깜빡임 타이머 초기화
this.blinkTime = this.blinkInterval;
}
//사라지는 시간 재기
this.fadeOutTimer += Time.deltaTime;
if (this.fadeOutTimer >= this.fadeOutTime)
{
Destroy(this.gameObject);
break;
}
yield return null;
}
}
}
깜빡이다 사라지는 코드를 작성하였는데 뭔가 딱딱한 느낌이 있어 서서히 알파값을 줄이며 사라지는 걸로 변경하였다.
프레임문제인지 그래도 조금 딱딱해 보이긴 하지만 ㅎㅎ
아직 데이터 테이블을 만들지 않았기 때문에 임시로 이넘 타입을 정해주고 스위치 문을 사용하여 awake시 타입에 따라 애니메이션을 지정해주었다.
하나의 애니메이터를 사용하려다 보니 이렇게 됐는데 좀더 깔끔하게 코드를 줄일수 있는 방법도 있을듯한데 좀더 애니메이터 제어에 대해 공부해보아야겠다.
반응형
LIST
'프로젝트 > 건즈앤 레이첼스' 카테고리의 다른 글
| [유니티 프로젝트] 절차적 맵생성 알고리즘을 이용한 랜덤 맵 생성 .1 (1) | 2023.03.10 |
|---|---|
| [유니티 프로젝트] 타일맵 콜라이더 충돌 컴포넌트 구성과 rigidbody의 velocity 그리고 맵 제작시 레이어 설정 (1) | 2023.03.09 |
| [프로젝트] 아이작 맵 생성 알고리즘 설명 (제작자 Himsl의설명 영상 분석) .1 (1) | 2023.03.07 |
| [알고리즘] (MST)최소 신장 트리란? (0) | 2023.03.05 |
| [프로젝트] 스프라이트 배경 라인 따기 & 스프라이트 슬라이스 문제 (0) | 2023.03.01 |