본문 바로가기
개발/Unity) 코드분석

Unity)코드분석)크리에이터 키트 : RPG(Learn Project)

by 테샤르 2022. 7. 25.

크리에이터 키트 : RPG(Learn Project)

Unity Learn 에서 지원하는 크리에이터 키트 : RPG를 간략하게 분석하는 포스팅이다.

Unity Hub의 학습 텝에서 간단하게 다운로드가 가능하다.

반응형

 

프로젝트 링크 주소 : [링크]

 

크리에이터 키트: RPG - Unity Learn

RPG 크리에이터 키트에 오신 것을 환영합니다! 용감한 모험가를 꿈꾸고 NPC 퀘스트를 완료하여 인벤토리에 아이템을 채우고 싶다면 이 키트가 마음에 드실 겁니다. 이 크리에이터 키트에는 코딩

learn.unity.com

 

------------------------------------------------------------------------------------------------------------

 

 

키보드 화살표, Space 입력을 받아서 다른캐릭터에게 상호작용이 가능하다.

<InputController.cs>의 항목에서 player의 Input Event를 확인할 수 있다.

  void CharacterControl()
        {
            if (Input.GetKey(KeyCode.UpArrow))
                model.player.nextMoveCommand = Vector3.up * stepSize;
            else if (Input.GetKey(KeyCode.DownArrow))
                model.player.nextMoveCommand = Vector3.down * stepSize;
            else if (Input.GetKey(KeyCode.LeftArrow))
                model.player.nextMoveCommand = Vector3.left * stepSize;
            else if (Input.GetKey(KeyCode.RightArrow))
                model.player.nextMoveCommand = Vector3.right * stepSize;
            else
                model.player.nextMoveCommand = Vector3.zero;
        }

캐릭터의 애니메이션은 Sprite Animation으로 이뤄져있다.

Character Animator State(메카님)

맵에 대한 정보는 Tile Map을 기반으로 되어있고  Learn을 따라서 진행하다보면 새로운 집을 만들고 지붕을 만들고 페이드효과를 적용한다.

TileMap은 Order in Layer를 통해서 Background - Midground - Fences- Forground 순으로 Order를 지정되어있다.

NPC근처에 가게되면 대화창이 나오면서 선택이 가능하다.

간단하게 살펴보면 해당 스크립트에서 CollisionEnter2D를 통해서 NPC와 충돌이 되면

해당 충돌한 NPC의 이벤트를 실행한다.

<NPCController.cs>

        public void OnCollisionEnter2D(Collision2D collision)
        {
            var c = GetConversation();
            if (c != null)
            {
                var ev = Schedule.Add<Events.ShowConversation>();
                ev.conversation = c;
                ev.npc = this;
                ev.gameObject = gameObject;
                ev.conversationItemKey = "";
            }
        }

대화창에 대한건 Conversation Script의 Insepctor를 통해서 Editor 가능하도록 구성되어있고 

ConversationPieceDrawer 를 통해서 Editor가 구현되어있다.

게임의 대화창을 편집하기위한 Custom Tool 형태로 구현되어있다.

Scene의 마우스 오른쪽해서 GamePlay Prefabs에서 Add NPC Here을 선택하면 해당 위치에 NPC가 생성된다.

<SceneContext.cs>

SceneGUI를 통해서 specialFolders의 경로의 Asset을 Menu로 만들고 클릭하게되면 CresateItemdㄹ 통해서 해당 위치에 instantiatePrefab을 해서 생성한다.

static void OnSceneGUI(SceneView sceneview)
        {
            if (Event.current.button == 1)
            {
                if (Event.current.type == EventType.MouseDown)
                    clickClock.Start();
                if (Event.current.type == EventType.MouseUp)
                {
                    clickClock.Stop();
                    var period = clickClock.ElapsedMilliseconds;
                    clickClock.Reset();
                    if (period < 300)
                    {

                        var mousePos = Event.current.mousePosition;
                        float ppp = EditorGUIUtility.pixelsPerPoint;
                        mousePos.y = SceneView.lastActiveSceneView.camera.pixelHeight - mousePos.y * ppp;
                        mousePos.x *= ppp;

                        Ray ray = SceneView.lastActiveSceneView.camera.ScreenPointToRay(mousePos);

                        mousePosition = ray.origin;
                        mousePosition.z = 0;
                        OnContextClick();
                        Event.current.Use();
                    }
                }
            }
        }


        static void OnContextClick()
        {
            var menu = new GenericMenu();
            foreach (var i in AssetDatabase.FindAssets("t:GameObject", specialFolders))
            {
                var path = AssetDatabase.GUIDToAssetPath(i);
                var g = AssetDatabase.LoadAssetAtPath<GameObject>(path);
                var menuPath = System.IO.Directory.GetParent(path);
                menu.AddItem(new GUIContent($"{menuPath.Name}/Add {g.name} Here"), false, CreateItem, g);
            }
            menu.ShowAsContext();
        }

<Questcs.cs>

기본적으로 퀘스트에 관련된 데이터로 ConversationScript에 Quest를 연결해서 사용할수있다.

Learn의 퀘스트 만들기를 따라 진행하면서 이것저것을 확인했는데.

기본적으로 퀘스트를 활성화하기, 또는 특정 아이템이 존재할때 활성화,

혹은 해당 아이템을 보상을 준다던지, 분기처리(Yes,No)등 여러가지 상황에 대해서 연결하는 구조가 잘되어있다.

 

<Story>

간단하게 스토리를 추가할수 있도록 구성되어서 편리했다.

 

-----------------------------------

RPG Maker처럼 클릭해서 NPC, Store, Quest 등 여러가지를 만들수있는 구조와 Editor기능을 확인할수 있었다.

전반적인 기능들을 학습할수 있어서 좋았던 Learn Project이다.

 

[Unity -Top Paid Package]

[Unity -Top Free Package]

[Unity -New Asset Package]

 

 

★★★

반응형

댓글