[APP] Papers 3 및 Mac Bundle


Back to the Mac에서 소개된 대학생을 위한 할인 패키지에 Paper 3와 devonthink가 포함되어있어서 구매했다 (49.99)

http://macnews.tistory.com/4975

사실 이번 방학때 Papers 사려고 학생인증까지 받았는데 막상 결제를 하려고하니 약간 고민이 됐었다

마지막 학기인데 이제와서 다른 앱으로 갈아타기엔 너무 늦지 않았나 싶어서 그냥 쓰던 에버노트에나 잘 정리하자며 스킵했는데 (에버노트에 저장해둔 논문만 벌써 500개라 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ )

아무튼 에버노트도 PDF 내부 검색과 annotation도 워낙에 훌륭하긴하지만 나중에 논문쓰느라 바쁠땐 citation 도와주는것만도 큰 도움이 될것 같은거랑,

그중에 이제 진짜 중요한것만 골라서 어서어서 정리해야지.....

테스트 스크린샷.

맥이랑 윈도우 모바일 다 지원되서 다행.


저작자 표시 비영리 변경 금지
신고

[유니티] Playmaker

유니티용 플러그인 Playmaker를 질렀다 (65달러에서 45달러로 할인중이었음)

프로세싱으로 만들어둔 데모를 이제 본격 유니티의 세상으로 옮겨야하는데 java랑 C#이 그나마 비슷하다고는 해도 새로 배워야할 개념이 많아져서 허우적대는중

비주얼 프로그래밍이라고해서 Max/msp 같은건가 싶었는데 FSM 개념을 담은 Flow-chart?..

State Action Event간의 관계가 헷갈려서 듣던 튜토리얼을 멈추고 블로그를 뒤적거리며 개념 정리하는 중.



[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발 - Slideshare

introduce unity3D and playmaker basic - Slideshare

Hutong Games사의 튜토리얼 페이지



  • 함수 단위가 아닌 FSM 단위로 비주얼 프로그래밍 가능

  • GameObject FSM (Finite State Machine : 유한상태기계) 컴포넌트 하나 추가한 것이 하나의 FSM 객체가 된다. 한 게임 오브젝트에 여러 FSM 객체를 만들수도 있으며 일종의 레이어처럼 사용할수있다 (FSM1 캐릭터의 상태 변화제어, FSM2 캐릭터의 행동변화 제어)

  • FSM : State가 특정하게 제한된 것을 Finite State라 하며, 정해진 절차에 따라 반복적으로 그 일을 수행하는 Machine



  • State : FSM에서 하나의 상태를 표현하는 객체. 여러 action과 transitino으로 구성됨
  • Action : State에서 수행할 하나의 작업을 표현하는 객체. (오브젝트 이동 회전 등등등)
  • Transition : State에서 다른 State로의 이동. Transition에 지정된 Event가 발생했을때 다음 State로 넘어감
  • Event : Mouse down..FINISHED 등
  • Variable : 변수(Global도 따로 지정 가능). FSM이 아닌 곳에서도 객체 참조하여 값 얻을수 있음 


  • Animation event를 Playmaker로 전달 : animation event 함수를 PlaymakerFSM 함수중 SendEvent로 지정

  • 모든 PlayMakerFSM 컴포넌트로부터 Action 조회하기

foreach (var fsm in Component.FindObjectsOfType<PlayMakerFSM>())
{
    if (!fsm.Fsm.Initialized)
        fsm.Fsm.InitData();

    foreach (var state in fsm.FsmStates)
    {
        foreach (var action in state.Actions)
        {
            // use action
        }
    }
}

  • 마우스 클릭한 위치에 있는 오브젝트 찾아서 PlayMakerFSM에 이벤트 전달

if(Input.GetMouseButton(0)) {
   ray = Camera.main.ScreenPointToRay(Input.mousePosition);
   if (Physics.Raycast(ray, out hit, 5000)) {
    Debug.Log("name : " + hit.collider.name);
    //PlayMakerFSM fsm = hit.collider.GetComponent<PlayMakerFSM>();
    //fsm.SendEvent("이벤트명");

   }
  }


저작자 표시 비영리 변경 금지
신고

[자료] 유니티 UI 디자인 교과서 - 예제 코드


유니티 내장 UI 프레임워크 uGUI


책 링크 (http://wikibook.co.kr/UGUI/)

GitHub (https://github.com/wikibook/ugui


Chapter 1

  • Rigid Body의 Is Kinematic : 다른 오브젝트에 물리적 작용은 하지만 자신은 공간에 멈춰 있음

  • float yAngle = rotationSpeed * Time.deltaTime;   

    transform (0.0f, yAngle, 0.0f);

    //Time.deltaTime은 이전 프레임이 끝난 후 지금까지의 시간(초)


  • 인스펙터 뷰에서 private이나 protect 값이라도 앞에 [SerializeField] 넣으면 수치 변경 가능 
  • CubeGenerator
  •  


    public class CubeGenerator : MonoBehaviour

    {
        [SerializeField] private GameObject cubePrefab;    // 상자 프리팹
        
        public void Generate()
        {
            // 상자 프리팹을 인스턴스로 만든다
            GameObject obj = Instantiate(cubePrefab) as GameObject;
            // 인스턴스를 「CubeGenerator」오브젝트의 자식 형태로 추가
            obj.transform.SetParent(transform);
            // 인스턴스의 스케일을 프리팹에 맞춘다
            obj.transform.localScale = cubePrefab.transform.localScale;
            // 인스턴스의 위치를 CubeGenerator 오브젝트에 맞춘다
            obj.transform.position = transform.position;
            // 떨어질 때마다 변화하도록 회전 각도를 무작위로 지정
            obj.transform.rotation = Random.rotation;
        }
    }

  • Input Controller 
  •  using UnityEngine;


    public class InputController : MonoBehaviour
    {
        void Update()
        {
            if(!Application.isMobilePlatform)
            {
                // 모바일 플랫폼이 아닐  실시할 처리
                if(Input.GetMouseButtonUp(0))
                {
                    // 마우스 왼쪽 버튼을 눌렀다  상태라면
                    // CubeGenerator 컴포넌트에 포함된 Generate 메서드 호출
                    GetComponent<CubeGenerator>().Generate();
                }
            }
            else
            {
                // 모바일 플랫폼일  실시할 처리
                if(Input.touchCount >= 1)
                {
                    Touch touch = Input.GetTouch(0);
                    if(touch.phase == TouchPhase.Began)
                    {
                        // 터치가 시작된 상태라면 CubeGenerator 컴포넌트에 포함된
                        // Generate 메서드를 호출
                        GetComponent<CubeGenerator>().Generate();
                    }
                }
            }
        }
    }

  • 이벤트 메서드 
  • - Awake : 오브젝트의 인스턴스가 로드됐을 때 한번 호출.  씬에 배치된 게임오브젝트에 추가된 스크립트라면 씬이 시작될때 호출되고 프리팹에 추가된 스크립트라면 인스턴스로 만들어진 직후에 호출됨. 비활성화일때는 호출되지 않고 처음 활성화된 시점에 호출  

    - Start : 첫프레임이 지나가기전 한번만 호출

    - FixedUpdate : 게임 오브젝트가 활성화되어있는 동안 고정 프레임율에 맞춰 호출

    - Update : 게임오즈젝트가 활성화되어있는 동안 프레임마다 호출

    - LateUpdate : 프레임마다 Update 메서드가 처리를 끝내면 LastUpdate 메서드가 호출됨. Update 메서드에서 변경된 내용을 처리에 반영하고 싶을떄 사용 

    - Awake가 호출된 시점에서 생성될 오브젝트의 인스턴스는 모두 생성된 상태가 되므로 이 시점에서 다른 오브젝트를 참조할수는 있으나 각 오브젝트에 연관된 Awake 메서드가 호출되는 순서가 정해진 것이 아니므로 참조되는쪽 오브젝트 처리가 안끝났을수도 있음. Awake메서드에서는 자신의 초기화 하고나서 다른 오브젝트로 연결되는 참조를 얻어내기만 하고 정보를 얻어내는 일은 나중에 호출되는 Start에서 하는 것 권장 


Chapter 2


  • 레이어별 렌더링 순서를 코드로 변경 

    obj.transform.SetAsFirstSibling(); //맨먼저 렌더링. 가장아래쪽.

    obj.transform.SetAsLastSibling(); //맨나중에렌더링. 가장위쪽

    obj.transform.SetSiblingIndex(2);  //계층에서 3번째요소가 되는 위치에. 아래에서 세번째로 렌더링.


  • 캔버스 렌더링 모드 
  • - Screen Space 

     : Overlay 모드. 화면 전체 덮는 레이어. Pixel perfect는 선명하나 퍼포먼스 많이 차지. Sort Order 는 0부터 아래쪽 순서로

     : Camera 모드 : 지정된 카메라와 일정한 거리만큼 떨어져 렌더링됨. Sorting Layer 추가하여 거리와 상관없이 렌더링 순서 제어 가능. 

    - World Space 모드 : 다른 게임 오브젝트와 동일한 자격. 



저작자 표시 비영리 변경 금지
신고


티스토리 툴바