아직 베타 버전인 유니티 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");
               }
       }
}

Posted by 프로그래머

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


블로그 이미지

유니티 아이폰 안드로이드 게임 개발 (Unity3D, iPhone, iOS, Android, Game) , 독립 게임 개발자 (Indie Game Developer)

- 프로그래머

Archives

Calendar

«   2015/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Site Stats

Total hits:
6103507
Today:
841
Yesterday:
1341