오늘은 오딘 인스펙터와 두트윈을 가지고 캐릭터 선택같은 느낌의 예제를 만들어보려고 한다.
최종프로젝트에서 가능하다면 ? 오딘으로 몇가지 만들어보고싶은 툴들이 있어서 연습할 겸 해보자
그냥 활용만 해보는 것이기에 혹시나 따라한다면 좀 더 효율적으로 바꿔주시면 감사하겠습니다...
우선 캐릭터 데이터를 담아줄 오딘의 ? ScriptableObject 클래스를 만들어준다.
(뭐라고 해야하지 하여튼 오딘형식의 ?)
using Sirenix.OdinInspector;
using UnityEngine;
[CreateAssetMenu(fileName = "CharacterData", menuName = "Game/CharacterData")]
public class CharacterData : ScriptableObject
{
[PreviewField(50, ObjectFieldAlignment.Center)]
[Tooltip("캐릭터의 아이콘")]
public Sprite characterIcon;
[Tooltip("캐릭터의 이름")]
public string characterName;
[TextArea]
[Tooltip("캐릭터 설명")]
public string description;
}
그리고 예제로 사용할 데이터 몇가지를 만들어놓자.
그리고 캐릭터 매니저(오딘)를 만들어주고 에디터에서도 빈 GameObject를 만들고 아래의 스크립트를 컴포넌트로 추가해주자
using Sirenix.OdinInspector;
using System.Collections.Generic;
using UnityEngine;
public class CharacterManager : MonoBehaviour
{
[TableList]
[Tooltip("캐릭터 데이터")]
public List<CharacterData> characters;
}
컴포넌트에 추가했다면, 위에서 만든 데이터들을 인스펙터 창에서 TableList에 넣어주자
이제 UIAnimationController스크립트를 만들고 캔버스에 컴포넌트로 추가하고 자식으로 이미지(아이콘을 표시할것임)와 텍스트(이름을 표시할것임)를 만들어주고 필드에 컴포넌트를 연결하자
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
public class UIAnimationController : MonoBehaviour
{
public Image characterImage;
public Text characterNameText;
public Transform characterModel;
public void PlaySelectAnimation(Sprite icon, string name)
{
characterImage.sprite = icon;
characterImage.color = new Color(1, 1, 1, 0);
characterImage.DOFade(1, 0.5f);
characterNameText.text = name;
characterNameText.rectTransform.DOScale(Vector3.one * 1.2f, 0.2f).SetLoops(2, LoopType.Yoyo);
characterModel.DORotate(new Vector3(0, 360, 0), 1, RotateMode.FastBeyond360).SetEase(Ease.OutBack);
}
}
마지막으로 아래의 스크립트를 작성해주고~
public class CharacterSelector : MonoBehaviour
{
public CharacterManager characterManager;
public UIAnimationController uiAnimationController;
public void SelectCharacter(int index)
{
var selectedCharacter = characterManager.characters[index];
uiAnimationController.PlaySelectAnimation(selectedCharacter.characterIcon, selectedCharacter.characterName);
}
}
필요한 참조는 알아서 해주자.. 그리고
SelectCharacter에 원하는 인덱스 값을 넣어주면 작동을 한다.
작동영상은 아래와 같다.
진짜 참 해보면서 느낀건데 너무 간단하게 멋진 결과를 만들어낼 수 있는것같다.
이런 툴을 활용해서 상상하는걸 쉽게 만드는게 유니티의 장점인것같다.
너무 코드에 설명을 안적었나 ? 하고 위로 올라갔는데 설명할게 없다;