[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 34회차 미션 시작합니다.
04. 배틀로얄 - 13, 14 번을 진행합니다.
EffectTool Script 생성하여 진행합니다 ^^~
using UnityEngine;
using UnityEditor; // Editor Tool을 만들기 위해 필수
using System.Text;
using UnityObject = UnityEngine.Object;
// Clip Property를 수정하고, 읽고, 저장하는 기능.
public class EffectTool : EditorWindow
{
//UI 그리는데 필요한 변수들.
pubic int uiWidthXLarge = 450; // pixel 크기.
pubic int uiWidthLarge = 300;
pubic int uiWidthMiddle = 200;
private int selection = 0; // 선택 index
private Vector2 SP1 = Vector2.zero;
private Vector2 SP2 = Vector2.zero;
}
여기까지가 기본적인 처리를 위한 준비 과정을 마친 상태이고, 이제 본격적으로 이팩트 툴 작성에 들어갑니다 ^^
public class EffectTool : EditorWindow
{
// 위의 변수들..
// 이팩트 클립
private GameObject effectSource = null;
// 이팩트 데이터
private static EffectData effectData;
[MenuItem("Tools/Effect Tool")] // 유니티에 메뉴 생성
static void Init() {
effectData = ScriptableObject.CreateInstance<EffectData>();
effectData.LoadData();
EffectTool window = GetWindow<EffectTool>(false, "Effect Tool");
window.Show();
}
private void OnGUI() {
if (effectData == null) return;
EditorGUILayout.BeginVertical();
{
// 상단 - add, remove, copy
UnityObject source = effectSource;
EditorHelper.EditorToolTopLayer(effectData, ref selection, ref source, this.uiWidthMiddle);
effectSource = (GameObject)source;
EditorGUILayout.BeginHorizontal();
{
// 중단 - data list
EditorHelper.EditorToolListLayer(ref SP1, effectData, ref selection, ref source, this.uiWidthLarge);
effectSource = (GameObject)source;
// 설정 부분
EditorGUILayout.BeginVertical();
{
SP2 = EditorGUILayout.BeginScrollView(this.SP2);
{
if (effectData.GetDataCount() > 0) {
EditorGUILayout.BeginVertical();
{
EditorGUILayout.Separator();
EditorGUILayout.LabelField("ID", selection.ToString(), GUILayout.Width(uiWidthLarge));
effectData.names[selection] = EditorGUILayout.TextField("이름.", effectData.names[selection], GUILayout.Width(uiWidthXLarge));
effectData.effectClips[selection].effectType = (EffectType)EditorGUILayout.EnumPopup("이팩트 타입.", effectData.effectClips[selection].effectType, GUILayout.Width(uiWidthLarge));
EditorGUILayout.Separator();
if (effectSource == null && effectData.effectClips[selection].effectName != string.Empty) {
effectData.effectClips[selection].PreLoad();
effectSource = Resources.Load(effectData.effectClips[selection].effectPath + effectData.effectClips[selection].effectName) as GameObject;
}
effectSource = (GameObject)EditorGUILayout.ObjectField("이팩트", this.effectSource, typeof(GameObject), false, GUILayout.Width(uiWidthXLarge));
if (effectSource != null) {
effectData.effectClips[selection].effectPath = EditorHelper.GetPath(this.effectSource);
effectData.effectClips[selection].effectName = effectSource.name;
}
else {
effectData.effectClips[selection].effectPath = string.Empty;
effectData.effectClips[selection].effectName = string.Empty;
effectSource = null;
}
EditorGUILayout.Separator();
}
EditorGUILayout.EndVertical();
}
}
EditorGUILayout.EndScrollView();
}
EditorGUILayout.EndVertical();
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndVertical();
EditorGUILayout.Separator();
// 하단
EditorGUILayout.BeginHorizontal();
{
if (GUILayout.Button("Reload Settings")) {
effectData = CreateInstance<EffectData>();
effectData.LoadData();
selection = 0;
this.effectSource = null;
}
if (GUILayout.Button("Save")) {
EffectTool.effectData.SaveData();
CreateEnumStructure();
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
}
}
EditorGUILayout.EndHorizontal();
}
public void CreateEnumStructure() {
string enumName = "EffectList";
StringBuilder builder = new StringBuilder();
builder.AppendLine();
for (int i = 0; i < effectData.names.Length; i++) {
if (effectData.names[i] != string.Empty) {
builder.AppendLine(" " + effectData.names[i] + " = " + i + ",");
}
}
EditorHelper.CreateEnumStructure(enumName, builder);
}
}
또 EffectData가 VisualStudio에서 오류를 발생하네요.. 전체 컴파일이라거나 namespace 등의 문제가 아닐까 싶긴합니다만..
관련 변수, 함수들 인텔리전스가 지원되지 않으니 강의하면서 답답하실 듯 하네요.. 미리 확인이 되지 않았던건가 하는 아쉬움은 남네요.
어여 해결이 되어서 뒤의 내용들에서는 수월하게 진행될 수 있기를 바랍니다.
드디어 위에까지 작업을 하면 위와 같이 Tools - Effect Tool 이라는 메뉴가 생성된 것을 볼 수가 있습니다..
그리고 클릭을 해보면 와우~ Vertical, Horizontal 함수를 열심히 사용하여 만든 "Effect Tool" 창이 나타나고, 지금까지 작업한대로 버튼들과 리스트컨트롤이 하나 붙어서 보이는 것을 확인할 수 있습니다.
Unity UI 제작을 일일이 Typing으로 하니 소스보기가 좀 복잡하네요 ㅎㅎ. 좀더 복잡한 UI를 가지는 사운드 툴은 확실히 정신이 없을 듯하네요..
Unity UI 제작을 지원하는 Addon 등이 없나 궁금해지네요.
궁금해서 검색해보니 Unity UI Addons를 누가 만들어 배포하고 있긴 하네요 ^^. 물론 안정성이나 검증되지 않아 사용하지 않으셨는지는 모르겠습니다. 나중에 시간이 되면 사용해 봐야겠습니다.
아직 버그들이 있기에 좀더 수정 작업을 진행하게 되고, 다음 시간에는 데이터 매니저와 이팩트 매니저를 만들어서 전체 EffectTool이 구동되는 것을 확인하고, 바로 이어서 사운드툴 제작으로 들어가겠습니다 ^^~
<위의 코드들은 제가 보면서 주요한 함수, 코드를 확인하기 위해 타이핑한 용도로, 전체 소스코드가 아님에 주의해 주세요. 전체 코드는 교육 수강을 하면 완벽하게 받으실 수가 있답니다 ^^>
패스트캠퍼스 - 올인원 패키지 : 유니티 포트폴리오 완성 bit.ly/2R561g0
유니티 게임 포트폴리오 완성 올인원 패키지 Online. | 패스트캠퍼스
게임 콘텐츠 프로그래머로 취업하고 싶다면, 포트폴리오 완성은 필수! '디아블로'와 '배틀그라운드' 게임을 따라 만들어 보며, 프로그래머 면접에 나오는 핵심 개념까지 모두 잡아 보세요!
www.fastcampus.co.kr
'[컴퓨터] > 웹 | 앱 | 게임 개발' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 36회차 미션 (0) | 2020.11.23 |
---|---|
[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 35회차 미션 (0) | 2020.11.22 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 33회차 미션 (0) | 2020.11.20 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 32회차 미션 (0) | 2020.11.19 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 유니티 포트폴리오 완성 100% 환급 챌린지 31회차 미션 (0) | 2020.11.18 |