본문 바로가기

unity

유니티 C# - Interface 게임에 적용해 보기 애매모호한 Interface를 이해하기 위한 실사용에서 도움이 될만한 간단한 예제입니다.우선 게임 속 몬스터가 종류별로 10마리 있다고 하겠습니다.게임을 진행하면서 플레이어가 공격을 할 때 Collider로 적을 감지해서 10마리의 몬스터중 어떤 몬스터인지파악을 한 후 해당 몬스터에 대미지를 준다고 가정해 보면 private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Enemy")) { switch(other.gameObject.name) { case "EnemyA": other.gameObject.GetComponent().Damage.. 더보기
유니티 c# - 델리게이트(Delegate) Action 사용해 보기 델리게이트에 대해 찾아보면 첫 설명이 대부분 대리자라고 나옵니다.예제로 제공되는 소스들은 함수 두어 개를 델리게이트에 연결하여 불러오는 방식입니다.대충 어떻게 돌아가는지는 알겠는데 처음 접하면 별로 사용할 일이 없어 보입니다. 실제 게임에서 델리게이트를 어떻게 사용하면 좋을지 간단한 예제로 알아보겠습니다. 프로그램 어디서나 쉽게 접근할 수 있는 싱글톤 패턴으로 정의된 GameManager.cs 가 있습니다.public class GameManager : MonoBehaviour{ public static GameManager instance; void Awake() { if (instance == null) { instance = this; .. 더보기
유니티 - 게임 데이터 JSON으로 저장하기 유니티로 게임 제작 시 각종 데이터 정보를 Json으로 저장하는 방법에 대해 알아보겠습니다.Json 저장은 유니티에서 기본 제공하는 JsonUtility을 사용 했습니다. 저장할 데이터 목록은 public List testDataA = new List();public List testDataB = new List();public int gold;public int power;string 리스트 10개와 int 리스트 10개 그리고 플레이어의 골드 및 파워를 저장해 보겠습니다.  public class GameManager : MonoBehaviour { public static GameManager instance; public List testDataA = new List(); publ.. 더보기
유니티 - 오브젝트 풀링(Object pooling) 오브젝트 풀링은 유니티에서 자주 사용되는 오브젝트를 생성과 파괴가 아닌 리스트(List)나 큐(Queue) 등에 저장해 두고 불러와 사용하고 사용 후엔 다시 반납하는 역할을 합니다. 유니티에서 ObjectPool이란 이름의 빈 오브젝트를 하나 만들고 아래 ObjectPool.cs를 넣어 줍니다.[System.Serializable]public class ObjectInfo { public string objectName; public GameObject perfab; public int count;}public class ObjectPool : MonoBehaviour{ public static ObjectPool instance; [SerializeField] Objec.. 더보기
유니티 (Unity) - 파일 데이터 비동기 방식으로 읽어 오기 유니티에서 게임의 설정을 Json 파일로 저장해 사용한다면 게임을 실행할 때마다 저장된 Json파일을가져와 게임의 설정 값에 대입시켜 주면 될 것입니다.문제는 JsonData.json 파일을 읽어 오는 도중에 게임 설정 값을 적용하는 코드로 넘어가 버리니 Null 에러가발생하게 됩니다.비동기 방식으로 JsonData.json 파일을 가져온 후 완료되었다면 게임 설정 값에 적용하는 방식을 알아보겠습니다. [System.Serializable]public class GameData { public int playerLevel; public int playerCurrntHp; public float playerPower;}우선 JsonData.json으로 변환될 간단한 GameData 모델이 .. 더보기
유니티 - 싱글톤 패턴(Singleton) 싱글톤 패턴은 가장 많이 사용하는 기본 패턴이니 따로 설명이 필요 없을 것 같습니다.바로 간편하게 적용할 수 있는 코드로 넘어가 보겠습니다.using UnityEngine;public class Singleton : MonoBehaviour where T : MonoBehaviour { public static T instance {get; private set;} protected virtual void Awake() { if (instance == null) { instance = (T)FindObjectOfType(typeof(T)); DontDestroyOnLoad(gameObject); } else { .. 더보기
유니티 - 커스텀 에디터 (Custom Editor) 커스텀 에디터 기능을 이용한 ScriptableObject 생성을 조금 더 편하게 도와줄 에디터를 만들어 볼까 합니다. 유튜브 AdamCyounis를 보다 편할 것 같아 만들어 보았습니다.https://www.youtube.com/channel/UC08QfQDLAd9D7aYPFgBUIng AdamCYounisCatch me live on twitch: Mon, Tues, Wednesday and Fri 1-6pm AEST. Twitch: http://twitch.tv/adamcyounis Twitter: http://twitter.com/adamcyounis Discord: https://discord.gg/9WkRG7s Become a Patron at https://www.patreon.com/ada.. 더보기
유니티 - CustomEditor 활용 (Inspector 꾸미기) 유니티에서 아이템이나 무기 등의 설정값으로 ScriptableObject를 사용하면서 해당 아이템이나 무기 등의 이미지를 상단에 표시해 주는 기능을 CustomEditor를 이용해 꾸며 보겠습니다. (아래 이미지 참조) 우선 사용자의 ScriptableObject 가 있을 겁니다. (아래 소스 참조)[CreateAssetMenu(menuName = "ScriptableObjects/WeaponValue")]public class WeaponValue : ScriptableObject { [Header("이름")] public string weaponName; [Header("이미지")] public Sprite weaponImage; [Header("파워")] public.. 더보기
유니티 (Unity) - 게임에 다중 언어 (Localization) 적용하기 유니티에서 제공해 주는 다중언어 시스템을 이용한 게임 적용 방법을 알아보겠습니다."사용된 유니티 버전은 2021.3 입니다. 버전에 따라 조금씩 차이가 있을 수 있습니다."  우선 Package Manager에서 Localization을 설치해 주세요. Project 창에서 "Language" 폴더를 하나 만들어 줍니다. (폴더의 이름은 다른 것으로 하셔도 됩니다.) Project Settings 창에서 Localization > Create를 클릭합니다. Create를 클릭하신 후 앞에 만들어 두었던 "Language" 폴더를 선택 후 저장. 폴더 저장 후 화면이 위와 같이 변경되면 Locale Generator를 클릭해 줍니다. 그럼 새창이 나오면서 게임에 적용될 언어를 선택할 수 있습니다.  우선 .. 더보기
유니티 (Unity) - 확률 뽑기(생성) https://docs.unity3d.com/kr/2019.4/Manual/RandomNumbers.html 랜덤 게임플레이 요소 추가 - Unity 매뉴얼여러 게임에서 임의로 선택되는 항목 및 값은 중요합니다. 이 섹션에서는 Unity에 내장된 랜덤 함수를 사용하여 일반적인 게임 역학을 구현하는 방법에 대해 알아봅니다.docs.unity3d.com 유니티에서 제공해 주는 확률 코드를 이용한 뽑기 및 기타 등등 여러 곳에서 사용할 수 있는 랜덤 확률 코드에 대해 알아보겠습니다.코드만 복사 붙여 넣기 해서 사용하는 것보단 내용을 알고 사용하는 게 더 도움이 되겠죠? public class RandomTest : MonoBehaviour { [Header("확률 설정")] public float[.. 더보기