아직 베타 버전인 유니티 2D 를 활용해서 간단한 2D 액션 게임 데모 버전을 만들어봤습니다. 3D에서 쓰던 메카님 애니메이션 시스템이 2D에도 활용할 수 있게 되었는데 여기에 필요했던 트리거 파라메터와 FSM의 상태 변경을 즉시  할 수 있는 메소드 그리고 애니메이션 창에서 이벤트를 추가할 수 있게 된 점 때문에 개발하기 좀더 편해졌다고 할 수 있겠네요. 스프라이트 관련 작업을 하는 부분도 편해진 것 같은데 직접 유니티2D를 테스트 해보세요. (13일 오늘 정식 출시되었네요. 하단에 샘플 패키지도 추가 했으니 참고 바랍니다.)








https://github.com/textcube/unity2d-example
https://bitbucket.org/textcube/unity2d-example

using UnityEngine;
using System.Collections;
public class Player2D : MonoBehaviour {
       Animator animator;
       GameObject enemy;
       float speed = 0f;
       bool isMove = false;
       void Start()
       {
               animator = GetComponent<Animator>();
               enemy = GameObject.Find("Enemy2D");
       }
       void OnDeal()
       {
               float dist = enemy.transform.position.x - transform.position.x;
               if (dist > 3f || dist < 1) return;
               enemy.SendMessage("Damage", SendMessageOptions.DontRequireReceiver);
       }
       void GotoState(string some)
       {
               animator.SetTrigger(some);
               //animator.Play(some);
       }
       void Move()
       {
               speed += 0.01f;
               if (speed > 1) speed = 1;
               animator.SetFloat("Speed", speed);
       }
       void Stop()
       {
               speed = 0f;
               animator.SetFloat("Speed", speed);
       }
       void OnGUI()
       {
               Event e = Event.current;
               Rect area = new Rect(410, 10, 90, 100);
               if (GUI.Button(new Rect(10, 10, 90, 100), "Q:Attack1")) GotoState("Attack");
               if (GUI.Button(new Rect(110, 10, 90, 100), "W:Attack2")) GotoState("Attack2");
               if (GUI.Button(new Rect(210, 10, 90, 100), "E:Attack3")) GotoState("Attack3");
               if (GUI.Button(new Rect(310, 10, 90, 100), "Space:Jump")) GotoState("Jump");
               if (area.Contains(e.mousePosition) && e.isMouse)
               {
                       if (e.type == EventType.MouseDown) isMove = true;
                       if (e.type == EventType.MouseUp) isMove = false;
               }
               GUI.Button(area, "Right:Go");
       }
       void Update()
       {
               if (animator == null) return;
               if (Input.GetKey(KeyCode.Escape)) Application.Quit();
               if (Input.GetKeyDown(KeyCode.Q)) GotoState("Attack");
               if (Input.GetKeyDown(KeyCode.W)) GotoState("Attack2");
               if (Input.GetKeyDown(KeyCode.E)) GotoState("Attack3");
               if (Input.GetKeyDown(KeyCode.Space)) GotoState("Jump");
               if (Input.GetKeyDown(KeyCode.RightArrow)) isMove = true;
               if (Input.GetKeyUp(KeyCode.RightArrow)) isMove = false;
               if (isMove) Move();
               else Stop();
               if (speed > 0f)
                       transform.position += Vector3.right * speed * 0.03f;
       }
}

using UnityEngine;
using System.Collections;
public class Enemy2D : MonoBehaviour {
       Animator animator;
       public int life = 3;
       void Start () {
               animator = GetComponent<Animator>();
       }
       void Damage()
       {
               if (life < 1) return;
               animator.SetTrigger("Damage");
               life--;
               if (life < 1)
               {
                       animator.SetTrigger("Death");
               }
       }
}

2013/11/12 16:33 2013/11/12 16:33

댓글을 달아 주세요

  1. 비밀방문자 2013/11/14 19:35  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  2. 횡성한우진리 2013/11/14 15:06  댓글주소  수정/삭제  댓글쓰기

    http://hompy.info/89 코드 주석을 달아주시는게 좀 가능할까요?

  3. 개발자 2013/11/12 18:04  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 눈팅하고 있는 개발자입니다.
    혹시 유니티 4.3버전 베타 설치파일 얻을수 있을까요?
    한번 살펴보고싶은데 구하기가 쉽지않네요;;