Unity (38) 썸네일형 리스트형 [Unity] 델리게이트가 뭐야? 문제 플레이어와 적 200명이 있다. 플레이어는 적의 움직임을 멈출 수 있는 아이템 A를 먹었을 때 적을 어떠한 방식으로 멈추게 할 것인가? 해결 방법과 델리게이트 설명 1. 기본적으로 생각할 수 있는 부분은 플레이어가 아이템 A를 먹은 직후에 200명의 적 오브젝트에 들어가 속도와 관련된 변수를 0으로 초기화해주는 것이 있을 것이다. 직관적인 방법이지만 이러한 방식을 사용하면 아이템 A를 먹을 때마다 200명의 적을 모두 조사해줘야 하고, 이것을 적들이 아니라 적이 발사하는 투사체로 변하게 된다면 200개가 아니라 2000개도 될 수 있는 것이다. 코드가 비효율적이고, 재활용 가능하지도 않게 될 것이다. 이때 사용가능한 것이 델리게이트이다. 델리게이트란? 네이버 사전에서는 이런 뜻을 가지고 있다. "(.. [Unity] 생명 주기가 뭐야? 생명 주기란 유니티가 스크립트의 생명 주기 동안의 이벤트 함수들의 실행 순서를 지정해놓은 것을 말하는 것이다. Awake: 프리팹이 인스턴스화 된 직후에 호출됩니다. 오브젝트가 비활성화인 상태로 게임을 실행시키면 활성화시킬 때 함수가 호출되게 됩니다. OnEnable: 오브젝트 활성화 직후 함수가 호출됩니다. Start: 스크립트 인스턴스가 활성화 된 경우에 첫 번째 프레임 업데이트 전에 호출됩니다. FixedUpdate: 종종 Update 보다 더 자주 호출됩니다. 프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있습니다. 모든 물리 계산 및 업데이트는 FixedUpdate 후 즉시 발생합니다. FixedUpdate 의 움직임 계산을.. [Unity] 싱글톤 패턴은 뭐야? 게임을 제작하다 보면 게임 점수, 플레이어의 목숨, 난이도 조절 등 전체적인 게임의 자원을 관리하는 GameManager 스크립트를 만들어야 합니다. 게임의 자원을 관리하는 GameManager를 관련된 모든 스크립트에 인스턴스화하여 접근하게 된다면 코드가 비효율적이게 되고, 프로젝트가 커지게 되면 코드를 관리하기 힘들어지게 될 것입니다. 따라서 싱글톤 패턴을 사용하게 되면 GameManager를 하나의 인스턴스로 선언하여 모든 스크립트에서 접근 가능하게 하고, 인스턴스 간 간섭을 피하고, 메모리를 적게 하게 할 수 있게 해줍니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using System.Collections; using System.Collect.. [Unity] 오브젝트 풀링은 뭐야? 오브젝트 풀링이란 계속해서 생성, 삭제되는 오브젝트로 인해 생기는 쓰레기값으로 인한 디바이스의 부하를 막기 위해서 미리 오브젝트를 생성해놓고 필요에 따라서 활성화 시켜주는 것을 말한다. 위의 그림처럼 오브젝트가 생성이 되고 파괴가 될때 쓰레기값이라는 것을 남긴다. 이 값을 크기는 매우 작아 몇십개 이상이 모여도 컴퓨터나 핸드폰에 부하가 가지 않는다. 하지만 대규모 멀티플레이, RPG 게임 등을 생각해보면 오브젝트의 생성과 파괴가 몇십개로 끝나지 않는다. 그렇기 때문에 위의 그림처럼 게임에 필요할 것 같다고 생각되는 수만큼 미리 오브젝트를 생성 시켜주는 것이다. 이렇게 하면 처음 게임을 실행시킬 때 약간의 로딩 시간이 필요하다. 하지만 이 후로는 게임의 진행에 있어서 풀을 생성하지 않은 것보다 매끄럽게 진.. [Unity] 퀘스트를 만들어보자(4) 퀘스트 만들기 마지막편입니다. GameManager 스크립트의 추가 내용을 설명하겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GameManager : MonoBehaviour { void Start() { questText.text = questManager.CheckQuest(); Debug.Log(questManager.C.. [Unity] 퀘스트를 만들어보자(3) 2편에 이어서 3편을 만들어보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 using System.Collections; using System.Collections.Generic; using UnityEngine; public class TalkManager : MonoBehaviour { void MakeData() { talkData.Add(10 + 1000, new string[] { "넌 뭐야", "오른쪽으로 가봐" }); talkData.Add(11 + 2000, new string[] { "넌 뭐야", "할거 없어보이는데", "내 증기 좀 찾아줘" }); talkData.Add(20 + 5000, new string[] { "난 증기야", "날 잡아봐" }); talk.. [Unity] 퀘스트를 만들어보자(2) 퀘스트 만들기 2번째이다. 1번째보다는 많은 내용과 어려운 논리들이 있으니 유의하면서 보기바랍니다. 1편에 이어서 QusetManager 스크립트를 완성하겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 using System.Collections; using System.Collections.Generic; using UnityEngine; public class QuestManager : MonoBehaviour { void NextQuest() { questId += 10; questActionIndex = 0; } void ControlObject() { switch (questId) {.. [Unity] 퀘스트를 만들어보자(1) 퀘스트를 만들어서 진행하는 것을 만들어볼 것이다. 퀘스트 만들기는 조금 심화과정이기 때문에 여러편에 걸쳐서 만들어지게 될 것 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 using System.Collections; using System.Collections.Generic; using UnityEngine; public class QuestData { public string questName; public int[] npcId; public QuestData(string name, int[] npc) { questName = name; npcId = npc; } } 먼저 QuestData 스크립트를 만든다. 간단한 퀘스트의 이름과 나중에 사용할 npcId를 저장해준다. qu.. 이전 1 2 3 4 5 다음