2015년 1월 15일 목요일

[uFrame 1.5] uFrame에서 특정 타입을 diagram에서 이용 가능하게함

개요
uFrame의 plugin을 작성하여, uFrame에서 특정 타입이 이용 가능하게 함.

수순
uFrame의 기본적인 플러그인 소스코드가 아래 패스에 배치되어 있음.
이를 참고로, 동일한 플러그인을 작성하여 Editor폴더 이하에 배치하면 로드됨.

Editor는 굳이 uFrameComplete폴더 이하일 필요는 없음

[Unity Project/Assets]/uFrameComplete/uFrame/uFramePlugins/CorePlugin/Editor/UFrameEditorPlugin.cs

namespace dependancies

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using Invert.StateMachine;
using Invert.uFrame;
using Invert.uFrame.Code.Bindings;
using Invert.uFrame.Editor;
using Invert.uFrame.Editor.ElementDesigner;
using Invert.uFrame.Editor.ElementDesigner.Commands;
using UniRx;
using UnityEngine;


Inheritance

public class UFrameModelTypesPlugin : DiagramPlugin


Required Overrides
 public override decimal LoadPriority  
   {  
     get { return 1; }  
   }  
   public override bool Enabled  
   {  
     get { return true; }  
     set {}  
   }  
   public override void Initialize (uFrameContainer container)  
   {  
     var typeContainer = uFrameEditor.TypesContainer;  

     // Color는 기본 설정에 포함되어있지 않음.
     typeContainer.RegisterInstance (new ElementItemType () {  
       Type = typeof(Color),  
       Group = "",  
       Label = "Color",  
       IsPrimitive = true,  
       IsUnityEngine = true,  
     },"Color");  

   }  

현재 1.5rc2버전을 기준으로
Namespace이하에 배치된 타입에 관해서는 자동 생성에서 하위 namespace route가 없어져버리는 버그가 발생하고 있다. 다른 해결방법을 찾지 못한다면 자동생성후 매번 using namespace ...를 해줘야하는 불편함이 있다.

댓글 4개:

  1. 오! 이렇게 다이어그램에 타입을 추가할 수 도 있군요! 내용 공유해주셔서 감사합니다.

    지금 저희 프로젝트에서도, uframe 도입을 검토하고 있습니다.

    간단하게만 살펴본거라, 말을 꺼내기 조심스러우나, 제가 느낀점은, frame워크 컨셉이 다이어그램-코드제너레이터-MVVM이라 frame워크가 조금 크고, 새로운 사람이 왔을시 개념 적용에 따른 교육비용이 조금 많이 발생할것 같습니다.

    실례가 안되신다면, 활용하면서 느끼셨던 점을 듣고 싶습니다.

    - 감사합니다.

    답글삭제
  2. 안녕하세요. 메모성으로 남기던 블로그라 글을 남겨주셔서 깜짝 놀랐습니다.

    개인적으로 unity단위에서 rails나 cakephp같은 MVC와 같은형태로 전체적인 코드의 정리가 가능하다면 좋겠다는 생각으로 입문중에 있습니다.

    다만 uFrame자체가 상당히 젊은 프레임워크다보니, 사용상에 있어서 자잘한 버그가 많이 발생하고 있다고 느끼고 있습니다. (예를들어서 한번 추가했던 element를 제거하거나 했을때 간간히 문제가 발생합니다) 또한 익숙하지 않은 개발자가 잘못된 설정을 했을때 프레임워크 내부적인 부분에서 에러가 발생해 이를 트레이싱하는데 조금 애먹는 감이 없지 않아 있습니다. 문서화에 대한 부분도 아직 많이 미약한 상태이기때문에, 조금더 시간과 개발사 당사자들의 노력이 기울여 지지 않는 이상, 상용 프레임워크를 사용함으로서 교육과정에서 참조할 자료가 적다는 문제가 있을거라 생각됩니다.

    MVVM이라곤 하지만, MVCVM이라는 조금 자체적인 디자인패턴을 표방하고 있는게 이 프레임워크인데다, 웹서버용 MVC와같이 깔끔하게 정리된 사례는 아직 아니라 느끼고 있어서
    실제 업무에 적용한다면 리스크가 좀 큰 편이라 생각됩니다. 아마 지금 당장 제게 현업에 적용하라고 하게되면 PlayMaker나 다른 방법을 강구할 것 같습니다.

    더불어 element는 기본적으로 mono behaviour이기 때문에, 메모리 사용에 있어서 내부적인 구조를 이해하지 않은 상태로 사용시 메모리 운용상에 치명적인 결과를 초래할 수도 있습니다. 이 부분은 어느정도 숙지된 상태에서 운용을 하시는게 안전하실거라 생각이 되네요. uFrame만 도입한경우 2~3메가 정도가 패키지에 추가되게 됩니다.

    uFrame을 사용함으로서 얻게되는 점은 내부에서 공식적으로 채택되어있는 UniRx와 MVVM을 이용한 Reactive Programming을 하게된다는 점이 큰것 같습니다. 오히려 이 부분이 없다면 이 프레임워크의 가치는 크게 떨어질거라 생각되구요.

    다만 국내에서도 Unity에 있어서는 Reactive Programming이 생소한 기법이라 생각되기에, 기존 Java나 .NET C#등에서 Reactive Extension을 경험한적이 없는 개발자분들이라면 사용함에 있어서 나름대로의 교육기간이 필요할거라 생각됩니다.

    일단 습득만 하게되면, 많은 부분에서 LINQ의 사용과 더불어 코드의 기술량이 짧아지게 되는 면이 있습니다.

    다만 UniRx의 경우 사실 uFrame의 독자기능이 아니라, 별도로 도입하는것도 가능하기때문에 굳이 uFrame에 얽매일 필요는 없다고 생각되네요.

    저도 uFrame은 문서만 살피다 최근들어 만지고 있는 부분이라 많은 내용을 말씀드리기에는 힘에 부칠것 같습니다. 당분간 작업도중에 필요한 내용들은 남겨가며 작업할 생각이니, 조금씩이나마 참고 되시면 좋을것 같습니다.

    답글삭제
  3. 앗, 답변 감사드립니다.

    음.. 메모리 부분에 대해서는 간과하고 있었는데, 신경써줘에겠네요.
    프레임워크라 습득만하면, 구조화되게 짤 수 있을것 같은데, 말씀하신것처럼 계속 active중인 프로젝트라 작업에 영향을 줄 정도로 바뀌게 될까 조금 걱정되기도 합니다.

    아 그리고, 이렇게 간단하게 남겨주시는 글이라도, 정리하고 남기는데 드는 정성과 시간에 대해서 조금이나마 느낄 수 있습니다.

    다시 한번 감사드립니다.

    답글삭제
  4. 아직 인지도도, 실무에 대해 검증이 안된 프레임워크라 리스크가 크게 느껴지는것 같습니다.

    현재 이미 코드 작성이 진행된 프로젝트라면, 대부분의 경우 이식 자체에도 상당한 시간이 드는게 아닌가 하는 생각이 듭니다.

    프레임워크 사용에 있어서 교육도 교육이거니와, 그 교육에 들어감에도 자료가 부족한 부분, 기본적인 운용에 있어서 발견되는 이유를 한눈에 파악할 수 없는 버그를 생각하면 한차례 토이프로젝트로 검증을 마친 후에 사용하는것이 바람직하지 않는가 하는 생각이 듭니다.

    유니티에서 MVVM패턴으로 상용화된 프레임워크가 몇 안되고, 그 중에 하나이기때문에 조금 주목받는 면이 있지 않나 하는 생각이 듭니다만, 장기적으로는 기대해볼 수 있을것 같긴한데 현 시점에서 투입... 이라는건 좀 꺼려진다는게 제 개인적인 생각이네요. 아직 제가 이 프레임워크의 대부분을 파악한게 아니라 아직 좀 섣부른 발언일지도 모르겠습니다만.

    다만 장기적으로는 이 프레임워크가 유니티 개발툴로서 잘 정착이 되고, 안정화와 문서화, 커뮤니티 활성화가 잘 이루어진다면 말씀하신 특징들이 개발자들간으로 하여금 커뮤니케이션에 도움이 될 수 있지 않는가 하는 생각이 듭니다.

    좋은 선택하셔서 하시는 일 잘 되시길 기원하겠습니다. 찾아주셔서 감사합니다.

    답글삭제