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

04. 배틀로얄 - 07, 08 번을 진행합니다.





일단 Assets/1.Scripts 폴더에 대한 간단한 설명입니다.

+ Common - 공통적인 스크립트들
+ GameData - GameAsset에 쓰일 데이터 스크립트들
+ Helper - 에디터, 툴 Helper 스크립트들
+ Tool - 툴 스크립트들
+ Util - 시간계산, 위치계산 등의 유틸 스크립트들

+ Manager 폴더를 만들고, C# 스크립트 ResourceManager를 추가합니다.


using UnityEngine;
using UnityObject = UnityEngine.Object; // Object를 어디것인지 명확히 하여 사용.
/// <summary>
/// Resources.Load를 래핑하는 클래스
/// 나중엔 어셋번들로 변경됨.
/// </summary>
public class ResourceManager
{
    // ResourceManager 클래스를 Singletone 패턴으로 구현해도 되지만, 간단한 클래스는 그냥 함수를 static으로 해서 지원해도 편하다.
    public static UnityObject Load(string path) {
        // 지금은 리소스 로드지만 추후엔 어셋 로드로 변경됨.
        return Resources.Load(path);
    }
    
    public static GameObject LoadAndInstantiate(string path) {
        UnityObject source = Load(path);
        if (source == null) return null;
        return GameObject.Instantiate(source) as GameObject;
    }
}





이팩트 툴 제작을 위한 이팩트 데이터 모델을 먼저 제작합니다.
여기 내용들은 게임 장르와 기획에 따라 엄청나게 바뀌게 됩니다. 이 툴을 사용하게 되는 분들은 기획자나 밸런서분들이 될 것입니다. 그래서 요구사항도 많아지게 될 것입니다.

불필요한듯하고 굉장히 손도 많이 가는 툴을 왜 만드느냐고 의문을 가지는 개발자들이 많은 듯하네요..
저는 무조건 찬성입니다. 무조건 Tool을 개발해야 합니다. 게임뿐만이 아니라 어떠한 프로그램을 만들더라도 마찬가지라고 생각합니다. 이러한 AddOn Tool이든 Helper Tool이든 마찬가지라고 생각합니다.

Tool을 만들다 보면 3번의 고비가 온다고 합니다. ㅋㅋㅋㅋㅋㅋㅋㅋ.
사운드 툴 만들 때, 캐릭터 만들 때, 그리고 애니메이션 만들 때라고 합니다. ㅎㅎ 잘 넘기고 이겨내면 멋진 게임을 개발해 낼 수가 있게 되는 것이겠지요..


<Effect Clip>
+ Prefab - 터지는 효과, 피격 효과, 터지는 Mesh 등
+ 생명주기 - 몇초후에 사라져라 또는 화면 밖으로 넘어가면 사라져라 등
+ 위치 - 캐릭터의 손에 붙는 이팩트인가, 피격이팩트.
+ 사운드 등등..


<Effect Data>
+ Effect Clip들의 모음





EffectClip과 EffectData 스크립트를 추가합니다.

Effect Tool은 그래도 간단한 편입니다. Sound Tool로 가면 많이 복잡해진다고 합니다 ^^; 기대도 되고 긴장도 되네요.



/// <summary>
/// 이팩트 프리팹과 경로와 타입 등의 속성 데이터를 가지고 있게 되며
/// 프리팹 PreLoading 기능을 갖고 있고 - 풀링을 위한 기능이기도 합니다.
/// 이팩트 인스턴스 기능도 갖고 있으며 - 풀링과 연계해서 사용하기도 합니다.
/// </summary>
public class EffectClip
{
    public int realId = 0; // 추후 속성은 같지만 다른 이팩트 클립이 있을 수 있어서 분별용.
    
    public EffectType effectType = EffectType.NORMAL;
    public GameObject effectPrefab = null;
    public string effectName = string.Empty;
    public string effectPath = string.Empty;
    public string effectFullPath = string.Empty; // effectPath + effectName
    
    public EffectClip() { }
    
    public void PreLoad() {
        this.effectFullPath = effectPath + effectName;
        if (this.effectFullPath != string.mpty && this.effectPrefab == null) { // prefab 로딩이 되어있다면 다시 할 필요 없으므로
            this.effectPrefab = ResourceManager.Load(effectFullPath) as GameObject;
            //this.effectPrefab = (GameObject)ResourceManager.Load(effectFullPath); // 강제형변환을 앞에 넣어도 되지만 중요하지 않은 구문이 앞으로 오기 때문에 "as" 구문이 유용한 경우가 많다.
        }
    }
    
    public void ReleaseEffect() {
        if (this.effectPrefab != null)
            this.effectPrefab = null; // Destroy하지 않아도 GabageCollector가 처리할 것이다.
    }

    /// <summary>
    /// 원하는 위치에 내가 원하는 이팩트를 인스턴스합니다.
    /// </summary>
    public GameObject Instantiate(Vector3 Pos) {
        if (this.PreLoad() != null) {
            GameObject effect = GameObject.Instantiate(effectPrefab, Pos, Quaternion.identity);
            return effect;
        }
        
        return null;
    }
}





EffectType에서 "Ctrl + Click"을 하면 정의로 이동을 하게 됩니다.
GlobalDefine 스크립트는 위와 같은 내용을 가지고 있습니다.

 

걱정도 많으시고 받아들이는 사람에 대한 큰 배려심이기도 하셔서 반복적인 걱정 얘기를 많이하셔서 아직까지는 내용이 짧습니다. ㅎㅎ 강의 진행하시면서 개발 시간때문에라도 많이 빨라지지 않을까 싶습니다.

 

일단 화면도 잘 보이고.. VisualStudio 검정 배경에 글씨들도 잘 보입니다.

온라인 강의라 놓친 부분들은 다시 볼 수 있기 때문에 너무 걱정 안하시고 좋은 얘기와 내용 많이 해주시면 좋겠습니다.




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

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

 

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

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

www.fastcampus.co.kr

 

+ Recent posts