[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 30회차 미션 시작합니다.

04. 배틀로얄 - 05, 06 번을 진행합니다.




"Assets/1.Scripts/GameData" 폴더 내에 C# Script를 "BaseData"로 하나 생성합니다.

ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는데 사용할 수 있는 데이터 컨테이너입니다.

json을 실무에서 많이 사용하고 가장 좋지만, 이후 설명에서도 사용할 것이기 때문에 여기서는 비교 스터디 목적으로 xml 기반으로 구동되는 클래스를 작성합니다.

LinQ 구문도 가능하면 꼭 필요한 부분에서만 사용하겠다고 하시네요. 기존 C++ 개발자분들을 배려하시는 듯 합니다.



/// <summary>
/// data의 기본 클래스입니다.
/// 공통적인 데이트를 가지고 있게 되는데, 이름만 현재 갖고 있다.
/// 데이터의 갯수와 이름의 목록 리스트를 얻을 수 있다.
/// </summary>
public class BaseData : ScriptableObject
{
    public const string dataDirectory = "/9.ResourcesData/Resources/Data/";
    public string[] names = null; // 데이터를 읽기 전이라는 의미로 null 처리.
    
    public BaseData() { }
    
    public int GetDataCount() {
        int retValue = 0;
        if (this.names != null)
            retValue = this.name.Length; // Length는 Property, Count()는 확장 메서드. 실제 사용상 차이 있음.
        return retValue;
    }
    
    /// <summary>
    /// 툴에 출력하기 위한 이름 목록을 만들어주는 함수.
    /// </summary>
    public string[] GetNameList(bool showID, string filterWord = "") {
        string[] retList = new string[0];
        if (this.names == null) return retList;
        
        retList = new string[this.names.Length];
        for(int i = 0; i < this.names.Length; i++) {
            if (filterWord != "") {
                if (names[i].toLower().Contains(filterWorld.ToLower()) == false) {
                    continue;
                }
            }
            if (showID) {
                retList[i] = i.ToString() + " : " + this.names[i]; // index를 붙여서 보여주기.
            }
            else {
                retList[i] = this.names[i];
            }
        }
        return retList;
    }
    
    public virtual int AddData(string newName) {
        return GetDataCount();
    }
    
    public virtual void RemoveData(int index) {
    }
    
    public virtual void Copy(int index) {
    }
}





///를 입력하여 summary를 입력해줌으로써 다른 개발자가 해당 클래스를 사용하려고 할 때 많은 도움이 되기 때문에 현업에서는 사용하는 경우가 많습니다. 지금은 클래스가 몇 개 되지 않아 큰 도움이 될 것같이 보이진 않아도, 나중에 프로젝트가 커져서 클래스, 함수가 많아지게 되면 도움이 될 것입니다.

대신 summary를 입력해놓고 열심히 개발하다보니 클래스, 함수의 내용이 많이 변하였는데 summary 내용이 업데이트되지 않으면 오히려 혼선만 발생할 수 있습니다. 그래서 그럴거면 아예 달지 말자는 얘기도 있다고 합니다만...

너무 모든 곳에 다 설명을 달려고 하지 말고 클래스와 주요 함수 정도에는 달아주는 것이 좋습니다. 대신 함수를 업데이트하게 된다면 꼭 summary 내용을 확인하여 위배된다면 summary도 업데이트 해주는 것을 잊지말아야겠습니다.

summary는 협업에 있어서는 매너라고 생각하면 될 것 같습니다.



소스코드내 dataDirectory는 위와 같이 Unity Project에 있는 "Data" 폴더를 가리키게 됩니다.


 


"Edit - Preferences.." 에서 "External Tools"에서 "External Script Editor"가 설정되어 있어야 Unity와 Editor가 정상적으로 연동되고 컴파일됩니다.

실무에서는 "Rider(유료)"를 많이 사용하는데 여기서는 "Visual Studio 2019 (Community)" 버전을 사용하여 진행합니다.

 

 

여기까지 기반이 되는 BaseData 클래스를 제작하였고, 다음 시간에는 실제 Tool 제작에 들어가겠네요 ^^~

 




<위의 코드들은 제가 보면서 주요한 함수, 코드를 확인하기 위해 타이핑한 용도로, 전체 소스코드가 아님에 주의해 주세요. 전체 코드는 교육 수강을 하면 완벽하게 받으실 수가 있답니다 ^^>

패스트캠퍼스 - 올인원 패키지 : 유니티 포트폴리오 완성 bit.ly/2R561g0

 

유니티 게임 포트폴리오 완성 올인원 패키지 Online. | 패스트캠퍼스

게임 콘텐츠 프로그래머로 취업하고 싶다면, 포트폴리오 완성은 필수! '디아블로'와 '배틀그라운드' 게임을 따라 만들어 보며, 프로그래머 면접에 나오는 핵심 개념까지 모두 잡아 보세요!

www.fastcampus.co.kr

 

[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 29회차 미션 시작합니다.

04. 배틀로얄 - 03, 04 챕터를 진행합니다.





실제 게임을 만드는 기법들을 최대한 활용하여 알찬 강의를 준비하겠다고 하십니다 ^^~ 좋네요~

미리 만들어서 배포해주신 프로젝트에 대한 설명을 시작합니다. 유니티로 해당 프로젝트를 열어서 보면 됩니다.

해당 Scene은 "2.Scenes" - "PlayGround" Scene을 열어 둔 화면입니다.


우측 상단의 "Layout"은 "Default"로 선택된 상태에서 Customize 하여 사용합니다.

창들을 드래그하여 배치하면 됩니다.

좌측상단은 "Scene"과 "Console" 창을 배치합니다.
좌측하단은 "Game Scene"을 배치합니다. "Asset Store"는 느리기 때문에 닫아줍니다.
우측에는 "Hierarchy", "Project", "Inspector"를 화면과 같이 설정해 줍니다.

최신 버전에서는 "2 by 3" Layout을 선택하고 조금 수정하면 됩니다.





"Edit" - "Preferences..."를 클릭하여 "General"에서 "Show Asset Store search hits [ ]"를 Uncheck 해줍니다.

개발 속도에서 차이가 있기 때문에 조금이라도 쾌적한 환경에서 작업하기 위한 팁입니다.





또 위와 같이 Hierarchy, Project, Inspector를 나란히 배치하기도 합니다.
Project는 1 Column으로 설정해 줍니다. 이렇게 하면 Hierarchy와 Project간에 GameObject를 설정하기가 수월해집니다.



일반적인 게임만드는 순서입니다.
1. 어떤 게임을 만들까
2. 엔진 선택 & 버전
3. 타겟 설정 (어느 디바이스, 스토어)
4. 타겟 디바이스와 유저
5. 게임 기준 설정: 프로그램 디자인간 단위 결정. 폴더 이름 규약. 기본 해상도 결정(16:9로 1920x1080, 1136x640, 4:3으로 1024:768)


배틀로얄 프로젝트는 FHD 즉 1920x1080 기준으로 PC에서 구현되는 게임을 기준으로 제작합니다.





위와 같이 "1920 x 1080" 해상도를 추가해 줍니다. 요즈음은 자동 변환 등 해상도 표현이 조금 나아지긴 했지만 타겟 해상도 결정은 중요한 사안입니다. 일단 기본 해상도로 시작해서 추후 다른 지원 해상도를 추가하는 형태를 고려하는 것이 좋습니다.



"Project" 폴더의 "Assets" 설명입니다.

1.Scripts
    /Common
        /AnimatorKey
        /ButtonName
2.Scenes
9.ResourcesData // 추후 3, 4 등 추가될 예정이라서..
PolygonBattleRoyale




 

 

 


Animator - Animator Parameters - AnimatorKey가 위와 같이 연동되어 구동됩니다.
문자열 오타로 인한 문제들의 가능성이 있기 때문에 상수로 설정하고 사용하는데 이것이 AnimatorKey 스크립트입니다.

실무에서는 이렇게 처리하여 SetParameter의 문자열 대신 해당 상수를 사용하여 호출합니다.

추가적으로 실무 게임 제작시에는 CharacterAnimatorKey, MonsterAnimatorKey, NPCAnimatorKey 등을 나누어 제작합니다.

namespace도 여러가지 편의성등을 위해 사용하는 것이 좋고, 대신 위의 "FC"를 사용할 필요는 없고 각자 게임에 맞는 namespace 이름을 정하여 제작하면 됩니다.




public class ButtonName
{
    public const string Sprint = "Sprint";
    public const string Jump = "Jump";
    public const string Aim = "Aim", Shoulder = "Aim Shoulder";
    public const string Shoot = "Fire1",
        Pick = "Interact",
        Change = "Change",
        Reload = "Reload",
        Drop = "Drop";
}




Unity - Edit - Project Settings... 에 보면 "Input Manager"에 사용 이름들이 정의되어 있습니다. 대소문자 구분되어야 하구요.

"Fire1" 같은 경우 명확한 구분이 안되기 때문에 게임내 "Shoot" 상수로 명확히 구분하여 혼선을 방지하고 있다고 생각하면 됩니다.




PolygonBattleRoyale 폴더는 Polygon Battle Royal Pack을 구매하여 해당 폴더에 설정해 준 것입니다.

강의에서는 꼭 필요한 것들만 사용되었으니 좀더 디테일하게 개발해보고 싶다면 해당 팩을 구매하여 사용하기를 추천합니다.

Tool 제작을 하여 사용하는데 아주 중요한 내용입니다.

Sound Tool, Effect Tool 2개를 만들어 사용할 예정입니다.



 

 

 



리소스 매니저는 리소스들을 적재하여 래핑해 놓은 것입니다.



제작하려는 Effect Tool, Sound Tool 2가지 툴 정보입니다.

+ 상단에는 Add, Copy, Remove를 수행합니다.
+ 좌측에는 요소 목록이 표시됩니다.
+ 우측에는 각 요소의 설정 기능이 표시됩니다.
+ 하단에는 "Reload Settings", "Save Settings" 버튼이 위치합니다.


Effect, Sound Tool도 각각 만드는 것이 아니라 Base Class를 만들고 상속을 통하여 재활용도를 높여서 사용합니다.

해당 기능을 Excel을 이용하는 경우도 많지만 오류/오타 등의 버그가 발생할 수 있고 이는 개발시간이 늘어지는 문제로 연결될 수 있습니다.
이렇듯 Tool을 만들어 놓으면 변환시간도 줄어들고 Unity에서 실행하면서 바로 값 변경을 하여 확인할 수 있기 때문에 결론적으로 개발시간의 단축 및 안정성도 높아진다고 볼 수 있겠습니다.

Simple is Best.. 제 삶의 모토 정한 문장인데.. 여기서 듣네요 ㅎㅎ..



<위의 코드들은 제가 보면서 주요한 함수, 코드를 확인하기 위해 타이핑한 용도로, 전체 소스코드가 아님에 주의해 주세요. 전체 코드는 교육 수강을 하면 완벽하게 받으실 수가 있답니다 ^^>

패스트캠퍼스 - 올인원 패키지 : 유니티 포트폴리오 완성 bit.ly/2R561g0

 

유니티 게임 포트폴리오 완성 올인원 패키지 Online. | 패스트캠퍼스

게임 콘텐츠 프로그래머로 취업하고 싶다면, 포트폴리오 완성은 필수! '디아블로'와 '배틀그라운드' 게임을 따라 만들어 보며, 프로그래머 면접에 나오는 핵심 개념까지 모두 잡아 보세요!

www.fastcampus.co.kr

 

[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 28회차 미션 시작합니다.

04. 배틀로얄 - 01, 02 챕터를 진행합니다.





오리엔테이션 시간입니다.




배틀로얄 게임 제작에 들어가기 전에 강사님에 대한 자세한 소개를 해주십니다.

다니셨던 회사들.. 유니티 강의.. 도서 출판.. 온라인 강좌.. 제작 게임 소개..

현업에서도 아낌없이 자료를 공유하는 것으로 유명하셨나 보네요.


 


최종적으로 만들게 될 배틀로얄 게임의 최종 모습입니다.

강의를 하게 된 계기도 소개해 주십니다. 현업에서도 활용가능하고 난이도가 높더라도 실제 개발시 필요한 내용들을 전달하고 싶으셨다고 하시네요.

앞선 강의에서도 보았듯이 현업에서 사용하는 내용들이 많이 나옵니다. 그만큼 어려워 보일 수 있고 오랜 시간동안 누적된 많은 정보량인데 한정된 강의에 넣으려니 얼마나 준비를 많이 하셨을까 싶습니다.



Q&A - 강의를 듣기 전에 미리 알아두어야 할 것들이 있나요?

입문 강의가 아니다보니 유니티 사용법을 하나하나 설명할 수는 없습니다. 배틀로얄 게임을 실제 제작하려고 해도 100~200시간은 걸리기 때문에 한정된 강의 시간에 설명을 모두 하며 제작을 하기는 어렵습니다.

Github 등에서 무료 유니티 게임을 다운받아 C# 소스를 많이 리딩하고, C# 슈팅 게임정도는 제작을 해본 경험이 필요합니다.

 


Q&A - 게임에 사용되는 리소스는 구입해야 하나요?

게임 강의를 위한 최소한의 리소스는 제공되기 때문에 구입할 필요 없습니다. 다만 좀더 풍부한 컨텐츠 제작을 원하거나 게임 제작 배포를 하겠다고 하면 에셋 구매를 하고 개발을 하면 됩니다.




게임 리소스 내려받기

배틀로얄 게임 제작시 최소 80시간은 들어갔다고 하시네요. 하지만 그것도 길기에 20시간 내에 가능하도록 7번이나 소스를 뒤엎으며 준비하셨다고 합니다. ^^~ 좋은 강의를 위한 노력 너무 감사드립니다.

게임 제작에 필수 기초적이면서도 꼭 필요한 사운드, 이펙트들은 게임들간 비슷할 수 있기에 하나하나 상세하게 설명하진 않습니다. 실무적으로 중요한 내용위주로 꼭 집어 설명할 예정입니다.





Git과 Sourcetree에 대해 간략히 설명해 주십니다. 리소스 준비하고 세팅하는데에도 시간이 걸리기 때문에 준비된 프로젝트를 Github에서 다운로드하여 해당 프로젝트에서 게임 개발을 시작하는 것입니다.

그리고 유니티를 설치해야겠지요.. Unity Hub로 다운로드.




Unity Version에 대한 문의가 많아 다른 버전을 설치하는 방법에 대해 설명해주십니다. ^^~

 

LTS : Long Time Service. 오랜 시간동안 서비스될 것이라는 의미. 따라서 장기 게임 프로젝트를 진행한다거나 할 때에는 LTS 버전을 사용하는 것이 안정성의 확보에 도움이 되겠습니다. 


* 알아두어야할 기본 지식
+ 유니티 애니메이션 시스템과 로코모션에 대해
+ 유니티 네비게이션 시스템에 대해

찾아보라고 말씀하시면서 직접 영상을 찾아 간단히 설명도 해주십니다. ㅎㅎ

DefaultAvatar라는 GameObject가 있다면 Animator 컴포넌트에 Avatar, Controller가 꼭 필요하며,
Avatar는 3D Modeling, Controller는 Animation 구동을 위한 데이터라고 생각하면 됩니다.

가장 중요한 건 디아블로 강의에서 배웠던 State 상태가 있고 Transition(이전)이 발생하며 다른 상태로 바뀌며 다른 Animation이 구동되는 시스템입니다.
가만히 있다가 -> 걷다가 -> 달리다가 등의 상태 변경인 것입니다.


마찬가지로 내비게이션 시스템을 위한 NavMesh를 간단히 설명해 주십니다.
이또한 디아블로 강의에서 설명이 있었지요. ㅎㅎ 그래서 강의 순서를 디아블로를 먼저 교육 내용으로 선정한 것 같습니다.


다음시간부터는 이러한 기초 내용을 알고 있다는 전제와 기초 프로젝트를 준비해놓은 상태에서 게임 제작을 시작합니다.





<위의 코드들은 제가 보면서 주요한 함수, 코드를 확인하기 위해 타이핑한 용도로, 전체 소스코드가 아님에 주의해 주세요. 전체 코드는 교육 수강을 하면 완벽하게 받으실 수가 있답니다 ^^>

패스트캠퍼스 - 올인원 패키지 : 유니티 포트폴리오 완성 bit.ly/2R561g0

 

유니티 게임 포트폴리오 완성 올인원 패키지 Online. | 패스트캠퍼스

게임 콘텐츠 프로그래머로 취업하고 싶다면, 포트폴리오 완성은 필수! '디아블로'와 '배틀그라운드' 게임을 따라 만들어 보며, 프로그래머 면접에 나오는 핵심 개념까지 모두 잡아 보세요!

www.fastcampus.co.kr

 

+ Recent posts