본문 바로가기

unity

유니티 (Unity) - 실전 인벤토리 제작 (추가 기능) 위 이미지에서 보시면 Slots의 정보를 등록할 때 앞 내용에서 사용자가 직접 등록해 줘야 했습니다.이미지 하단의 버튼을 이용해 한번에 자동으로 가져 오는 기능을 추가해 볼까 합니다.버튼이 정상 작동하려면 우선 Slot Parent의 Content A와 B가 등록되어 있어야 합니다. 우선 InevntroyManager.cs를 열어 주세요. #if UNITY_EDITORusing UnityEditor;#endif using 선언부에 위 내용을 추가 해 주세요#if UNITY_EDITOR와 #endif로 현재 선언된 using은 유니티 에디터에서만 사용된다는 걸 알려줘야 합니다.만약 이 선언이 없다면 게임 컴파일시 에러가 발생하니 참고해 주세요 계속 InevntroyManager 에 추가되는 내용입니다. #.. 더보기
유니티 (Unity) - 실전 인벤토리 제작 (5부) 5부의 내용은 아이템 클릭 시 해당 아이템의 메뉴창을 만들어 보겠습니다.우선 앞에 만들었던 아이템 두 개의 이름을 변경하도록 하겠습니다. 아이템 이름을 한글에서 영문으로 변경하겠습니다. 한글 폰트설치 때문에 변경하니 한글폰트가 설치되어 있다면 변경 없이 그대로 사용하시면 됩니다. Canvas > ItemMenu 가 오도록 위치시켜 주세요 그런 후 Inventory 밑에 위치시켜 주시면 됩니다.Plus Button, Minus Button, Sell Button, Close Button 들은 이름 그대로 Button 컴포넌트를 추가해 주시면 됩니다.ItemMneu 스크립트 먼저 보시겠습니다. 위 그림의 최상단의 ItemMenu 오브젝트에 넣어 주세요 using System.Collections;usi.. 더보기
유니티 (Unity) - 실전 인벤토리 제작 (4부) 4부에서는 인벤토리에 들어 있는 아이템을 Json Data로 저장해 보겠습니다. UniTask를 사용할 일이 없을 것 같아 3부에서 코루틴으로 사용해도 된다고 했었지만파일 불러오기에서 사용해야 될 일이 있어 설치하셔야겠습니다. https://github.com/Cysharp/UniTask GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.Provides an efficient allocation free async/await integration for Unity. - Cysharp/UniTaskgithub.com 위 링크로 가시면 UniTask를 설치하실 수 있습니다. 오늘도 여.. 더보기
유니티 (Unity) - 실전 인벤토리 제작 (3부) Tab의 작동원리는 간단합니다. Tab A와 Tab B에 Button을 달아 해당 Tab을 클릭 시Content A나 B가 활성화되는 역할과 아이템을 Drag로 이동할 Tab위에 올려두면 역시해당 Tab의 Content가 활성화되는 기능을 가지고 있습니다. 빈 오브젝트를 만들어 이름을 Tab Group 지정합니다.그 아래 Tab A와 다시 그 아래 Tab의 이름을 지정할 TextMeshPro를 달아 주세요아래 이미지는 Tab A에 들어갈 Components이며 해당 값은 만드시는 인벤토리에 맞게조정해 주시고 Tab 모양을 만들 Image 역시 알맞은 이미지를 만들어 넣어 주시면 됩니다. Button의 색상은 모두 하얀색으로 통일해서 클릭되는 효과가 나오지 않게 해 줍니다.OnClick 이벤트에는 2부에.. 더보기
유니티 (Unity) - 실전 인벤토리 제작 (2편) 인벤토리 제작은 유니티 6.1을 사용하고 있습니다. 인벤토리에서 사용될 아이템을 만들어 보겠습니다.하나의 아이템 구성을 위한 스크립트블 오브젝트 입니다.using UnityEngine;[CreateAssetMenu(menuName = "ScriptableObjects/Item")]public class Item : ScriptableObject{ [Header("아이템 ID")] public string itemID; [Header("아이템 이름")] public string itemName; [Header("아이템 이미지")] public Sprite itemImage; [Header("아이템 판매 가격")] public long gold;#if UNITY_E.. 더보기
유니티 (Unity) - 실전 인벤토리 제작 (1편) 1. 실전 인벤토리 만들어 보기 인벤토리 제작은 유니티 6.1을 사용했습니다.추가로 DOTween을 설치해 주셔야 합니다(무료 버전)https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676?locale=ko-KR&srsltid=AfmBOoo3SndQsxuNEsbGH-KVgDU9HfrxFCQQbKhRXPybrlVuWKkqy9B3 우선 인벤토리의 모양은 아래 이미지와 같습니다. UI 이미지들의 모양이 조금 볼품이 없어도 기능적인 부분만 봐주시면 됩니다.인벤토리가 작동되는 방식은 우선 Tab A와 Tab B로 구분되어 있으며 Tab A만 사용한다면 Tab B는 삭제해도 되며또는 Tab C가 필요하다면 추가되는 방식으로 작동됩니.. 더보기
유니티 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.. 더보기