SlideShare una empresa de Scribd logo
1 de 11
FSM in Unity3d

skyseer00@hotmail.com
FSM?
• Finite State Marchine(유한상태머신)
  – 유한개의 상태와 이런 상태들 간의 변환으로 구성된
    계산 모형.
  – 게임에서는 주로 몬스터AI 구현에 사용

• 유니티에서의 FSM
  – 코루틴(Coroutine) 을 사용
     • 스레드와 비슷한 결과를 만들지만 스레드와 달리 동시에
       하나만 수행하는 프로그래밍 기법(단일 스레드)
     • 부하가 걸리는 작업을 나눠서 시행하기 위해서도 사용
     • 코루틴은 루아(Lua)등 에서도 사용
     • StartCoroutine(시작), IEnumerator(리턴), yield return(양보)
       키워드 사용
Coroutine VS
• Coroutine VS 스레드
  – 둘다, 독립적인 동작 구현을 위해 사용
  – 코루틴은 자원공유 문제를 고민할 필요가 없다

• Coroutine VS Update
  – 둘다, 일정 주기마다 특정 작업을 반복하도록
    프로그램을 구성할 때 사용(콜백 함수)
  – 코루틴은 필요에 따라 호출을 제어(호출 시간, 호출
    중지)할 수 있으므로 CPU의 자원을 덜 소비
  – 코루틴은 가상화 함수가 아니기 때문에 오버헤드가
    없어서 Call부하는 없음… 실제 FPS에 영향은 없음.
Unity3d Coroutine 의 기본 구조
<ex_Coroutine.cs>
• StartCoRoutine(시작) StartCoroutine("FSM");
    void Start () {
         print ("A");
• IEnumerator(리턴)
         StartCoroutine("Example"); //StartCoroutine(Example(2.0f));
         print ("C");
• yield return(양보) 키워드 사용
    }

    IEnumerator Example(){             //IEnumerator Example(float waitTime){
        while(true){
             print ("B");
             yield return null;        //yield return new WaitForSeconds(waitTime);
        }
    }

  void Update () {
        print ("D");
  }
결과 : A B C D B D B D…..
결과 : A B C D D D…..D B D….. D B D…..
몬스터 AI 설계
• Init – 초기 몬스터 세팅            Spawn
                                                    StartCoroutine(“BattleFSM”)
                    StartCoroutine(IdleFSM(5.0f))
• Idle - 유휴                                                      Retreat
• Move – 이동                    Init
• Search – 플레이어 감지
                                                                  Chase
                                               Update ()
•   Chase – 추격 이동              Idle

•   Attack – 공격                                 Search
                                                                 Attack
•   Retreat - 후퇴              Move
•   Flee – 도망
                                                                  Flee
몬스터 AI 구현


<Monster.cs>

     private enum State {
           Init,             //make sure that everything we need is here
           Idle,             //do nothing
           Move,             //random moving
           //Setup,                 //assign the values to the things we need
           //Search,                //find the player
           Chase,            //move to player
           Attack,                  //attack the player
           Retreat,          //retreat to spawn point
           Flee              //run to the nearest spawn point with another mob
     }
몬스터 AI 구현
     void Start() {
            _state = MonsterObject.State.Init;
            StartCoroutine(IdleFSM(5.0f));

     }

     private IEnumerator IdleFSM(float waitTime) {
           while(_alive) {
//               Debug.Log("Alive: " + _alive);
                 switch(_state) {
                 case State.Init:
                        Init();
                        break;
                 case State.Idle:
                        Idle();
                        break;
                 case State.Move:
                        Move();
                        break;
                 }

                 yield return new WaitForSeconds(waitTime);
           }
     }
몬스터 AI 구현
     private IEnumerator BattleFSM() {
           while(_alive) {
//               Debug.Log("Alive: " + _alive);
                 switch(_state) {
                 case State.Chase:
                        Chase();
                        break;
                 case State.Attack:
                        Attack();
                        break;
                 case State.Retreat:
                        Retreat();
                        break;
                 case State.Flee:
                        Flee();
                        break;
                 }

                 yield return null;
           }
     }
몬스터 AI 구현

      void Update ()
      {

            Debug.DrawLine(_target.transform.position, _myTransform.position, Color.yellow);

            if(_balttle == false){
                   if(Vector3.Distance(_target.position, _myTransform.position) > maxCloseDistance &&
Vector3.Distance(_target.position, _myTransform.position) < findPlayerDistance){
                          Debug.Log("***Battle Start***");
                          _balttle = true;
                          StopCoroutine("IdleFSM");
                          StartCoroutine("BattleFSM");
                          _state = MonsterObject.State.Chase;
                   }
            }

      }
FSM의 활용
• 스스로 여러개의 상태를 갖고 스스로
  상태를 변화시키는 모든 객체에 활용 가능
 – Ex. MonsterGenerator, AnimateSprite컴포넌트
참고 사이트
•

Más contenido relacionado

La actualidad más candente

ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」
ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」
ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」Kouji Ohno
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014NDOORS
 
ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」
ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」
ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」Sho Iwamoto
 
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2Unity Technologies Japan K.K.
 
[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~
[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~
[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~de:code 2017
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 
아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더포프 김
 
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜小林 信行
 
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編小林 信行
 
DeNA TechCon2019 How to implement live streaming client using Unity
DeNA TechCon2019 How to implement live streaming client using UnityDeNA TechCon2019 How to implement live streaming client using Unity
DeNA TechCon2019 How to implement live streaming client using UnityTakeyuki Ogura
 
Bethesda's Iterative Level Design Process for Skyrim and Fallout 3
Bethesda's Iterative Level Design Process for Skyrim and Fallout 3Bethesda's Iterative Level Design Process for Skyrim and Fallout 3
Bethesda's Iterative Level Design Process for Skyrim and Fallout 3Joel Burgess
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부Eunseok Yi
 
ゲームAI製作のためのワークショップ(II)
ゲームAI製作のためのワークショップ(II)ゲームAI製作のためのワークショップ(II)
ゲームAI製作のためのワークショップ(II)Youichiro Miyake
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
Node canvasで作るプロトタイプ
Node canvasで作るプロトタイプNode canvasで作るプロトタイプ
Node canvasで作るプロトタイプH T
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정Dae Hyek KIM
 
Blender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用するBlender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用するrarihoma
 
人工知能とゲーム(後篇)
人工知能とゲーム(後篇)人工知能とゲーム(後篇)
人工知能とゲーム(後篇)Youichiro Miyake
 
The Sight in a mirror 게임 개발 기술문서
The Sight in a mirror 게임 개발 기술문서The Sight in a mirror 게임 개발 기술문서
The Sight in a mirror 게임 개발 기술문서ssuser641680
 

La actualidad más candente (20)

ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」
ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」
ゲーム技術の研究所 テーマ「Narrative(ナラティブ)」
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
 
ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」
ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」
ゲーム音楽演出を進化させる「インタラクティブミュージック」と「音楽的ゲームデザイン」
 
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
 
[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~
[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~
[AI10] ゲームキャラクターのための人工知能と社会への応用 ~ FINAL FANTASY XV を事例として ~
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더
 
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
 
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
 
DeNA TechCon2019 How to implement live streaming client using Unity
DeNA TechCon2019 How to implement live streaming client using UnityDeNA TechCon2019 How to implement live streaming client using Unity
DeNA TechCon2019 How to implement live streaming client using Unity
 
Bethesda's Iterative Level Design Process for Skyrim and Fallout 3
Bethesda's Iterative Level Design Process for Skyrim and Fallout 3Bethesda's Iterative Level Design Process for Skyrim and Fallout 3
Bethesda's Iterative Level Design Process for Skyrim and Fallout 3
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
 
ゲームAI製作のためのワークショップ(II)
ゲームAI製作のためのワークショップ(II)ゲームAI製作のためのワークショップ(II)
ゲームAI製作のためのワークショップ(II)
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
Node canvasで作るプロトタイプ
Node canvasで作るプロトタイプNode canvasで作るプロトタイプ
Node canvasで作るプロトタイプ
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정
 
Blender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用するBlender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用する
 
人工知能とゲーム(後篇)
人工知能とゲーム(後篇)人工知能とゲーム(後篇)
人工知能とゲーム(後篇)
 
The Sight in a mirror 게임 개발 기술문서
The Sight in a mirror 게임 개발 기술문서The Sight in a mirror 게임 개발 기술문서
The Sight in a mirror 게임 개발 기술문서
 
인공지능을 위한 뇌과학
인공지능을 위한 뇌과학인공지능을 위한 뇌과학
인공지능을 위한 뇌과학
 

Destacado

유전 알고리즘으로 테트리스 AI 최적화하기
유전 알고리즘으로 테트리스 AI 최적화하기유전 알고리즘으로 테트리스 AI 최적화하기
유전 알고리즘으로 테트리스 AI 최적화하기상현 김
 
[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발
[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발
[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발MinGeun Park
 
마이크로소프트의 동작인식 센서 키넥트 v2
마이크로소프트의 동작인식 센서 키넥트 v2마이크로소프트의 동작인식 센서 키넥트 v2
마이크로소프트의 동작인식 센서 키넥트 v2상현 김
 
[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리
[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리
[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리MinGeun Park
 
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드MinGeun Park
 
스터디 초안 발표 - 알고리즘 (한양대 오픈소스동아리)
스터디 초안 발표 - 알고리즘  (한양대 오픈소스동아리)스터디 초안 발표 - 알고리즘  (한양대 오픈소스동아리)
스터디 초안 발표 - 알고리즘 (한양대 오픈소스동아리)Osori Hanyang
 
스크럼을 이용한 게임 개발
스크럼을 이용한 게임 개발스크럼을 이용한 게임 개발
스크럼을 이용한 게임 개발Insub Lee
 
Gamification (spicy marketing)
Gamification (spicy marketing)Gamification (spicy marketing)
Gamification (spicy marketing)Kwan Hang Cho
 
기획학과 A 11학번 김의환
기획학과 A 11학번 김의환기획학과 A 11학번 김의환
기획학과 A 11학번 김의환kyhss1805
 
게임 기획자 대체 뭐하는 놈들일까
게임 기획자 대체 뭐하는 놈들일까 게임 기획자 대체 뭐하는 놈들일까
게임 기획자 대체 뭐하는 놈들일까 상준 이
 
2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인홍준 김
 
광운대[바람] 4.vhdl fsm
광운대[바람] 4.vhdl fsm광운대[바람] 4.vhdl fsm
광운대[바람] 4.vhdl fsmNAVER D2
 
Kgc2012강연 이석준
Kgc2012강연  이석준Kgc2012강연  이석준
Kgc2012강연 이석준석준 이
 
Game Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM patternGame Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM patternYoung Ha Kim
 
한상원, 친아티스트 3D 캐릭터 리깅, NDC2010
한상원, 친아티스트 3D 캐릭터 리깅, NDC2010한상원, 친아티스트 3D 캐릭터 리깅, NDC2010
한상원, 친아티스트 3D 캐릭터 리깅, NDC2010devCAT Studio, NEXON
 
디자인 패턴
디자인 패턴디자인 패턴
디자인 패턴수빈 박
 
인공지능(Ai)
인공지능(Ai)인공지능(Ai)
인공지능(Ai)민호 송
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)hyun soomyung
 

Destacado (20)

유전 알고리즘으로 테트리스 AI 최적화하기
유전 알고리즘으로 테트리스 AI 최적화하기유전 알고리즘으로 테트리스 AI 최적화하기
유전 알고리즘으로 테트리스 AI 최적화하기
 
Fsm
FsmFsm
Fsm
 
[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발
[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발
[데브루키] 유니티와 Play maker를 이용한 쉽고 빠른 게임 개발
 
마이크로소프트의 동작인식 센서 키넥트 v2
마이크로소프트의 동작인식 센서 키넥트 v2마이크로소프트의 동작인식 센서 키넥트 v2
마이크로소프트의 동작인식 센서 키넥트 v2
 
[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리
[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리
[Gpg2권 박민근] 3.3 마이크로 스레드를 통한 ai 관리
 
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
 
스터디 초안 발표 - 알고리즘 (한양대 오픈소스동아리)
스터디 초안 발표 - 알고리즘  (한양대 오픈소스동아리)스터디 초안 발표 - 알고리즘  (한양대 오픈소스동아리)
스터디 초안 발표 - 알고리즘 (한양대 오픈소스동아리)
 
스크럼을 이용한 게임 개발
스크럼을 이용한 게임 개발스크럼을 이용한 게임 개발
스크럼을 이용한 게임 개발
 
Gamification (spicy marketing)
Gamification (spicy marketing)Gamification (spicy marketing)
Gamification (spicy marketing)
 
기획학과 A 11학번 김의환
기획학과 A 11학번 김의환기획학과 A 11학번 김의환
기획학과 A 11학번 김의환
 
게임 기획자 대체 뭐하는 놈들일까
게임 기획자 대체 뭐하는 놈들일까 게임 기획자 대체 뭐하는 놈들일까
게임 기획자 대체 뭐하는 놈들일까
 
Game ai.fsm.01
Game ai.fsm.01Game ai.fsm.01
Game ai.fsm.01
 
2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인
 
광운대[바람] 4.vhdl fsm
광운대[바람] 4.vhdl fsm광운대[바람] 4.vhdl fsm
광운대[바람] 4.vhdl fsm
 
Kgc2012강연 이석준
Kgc2012강연  이석준Kgc2012강연  이석준
Kgc2012강연 이석준
 
Game Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM patternGame Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM pattern
 
한상원, 친아티스트 3D 캐릭터 리깅, NDC2010
한상원, 친아티스트 3D 캐릭터 리깅, NDC2010한상원, 친아티스트 3D 캐릭터 리깅, NDC2010
한상원, 친아티스트 3D 캐릭터 리깅, NDC2010
 
디자인 패턴
디자인 패턴디자인 패턴
디자인 패턴
 
인공지능(Ai)
인공지능(Ai)인공지능(Ai)
인공지능(Ai)
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)
 

120629 fsm in unity3d skyseer

  • 2. FSM? • Finite State Marchine(유한상태머신) – 유한개의 상태와 이런 상태들 간의 변환으로 구성된 계산 모형. – 게임에서는 주로 몬스터AI 구현에 사용 • 유니티에서의 FSM – 코루틴(Coroutine) 을 사용 • 스레드와 비슷한 결과를 만들지만 스레드와 달리 동시에 하나만 수행하는 프로그래밍 기법(단일 스레드) • 부하가 걸리는 작업을 나눠서 시행하기 위해서도 사용 • 코루틴은 루아(Lua)등 에서도 사용 • StartCoroutine(시작), IEnumerator(리턴), yield return(양보) 키워드 사용
  • 3. Coroutine VS • Coroutine VS 스레드 – 둘다, 독립적인 동작 구현을 위해 사용 – 코루틴은 자원공유 문제를 고민할 필요가 없다 • Coroutine VS Update – 둘다, 일정 주기마다 특정 작업을 반복하도록 프로그램을 구성할 때 사용(콜백 함수) – 코루틴은 필요에 따라 호출을 제어(호출 시간, 호출 중지)할 수 있으므로 CPU의 자원을 덜 소비 – 코루틴은 가상화 함수가 아니기 때문에 오버헤드가 없어서 Call부하는 없음… 실제 FPS에 영향은 없음.
  • 4. Unity3d Coroutine 의 기본 구조 <ex_Coroutine.cs> • StartCoRoutine(시작) StartCoroutine("FSM"); void Start () { print ("A"); • IEnumerator(리턴) StartCoroutine("Example"); //StartCoroutine(Example(2.0f)); print ("C"); • yield return(양보) 키워드 사용 } IEnumerator Example(){ //IEnumerator Example(float waitTime){ while(true){ print ("B"); yield return null; //yield return new WaitForSeconds(waitTime); } } void Update () { print ("D"); } 결과 : A B C D B D B D….. 결과 : A B C D D D…..D B D….. D B D…..
  • 5. 몬스터 AI 설계 • Init – 초기 몬스터 세팅 Spawn StartCoroutine(“BattleFSM”) StartCoroutine(IdleFSM(5.0f)) • Idle - 유휴 Retreat • Move – 이동 Init • Search – 플레이어 감지 Chase Update () • Chase – 추격 이동 Idle • Attack – 공격 Search Attack • Retreat - 후퇴 Move • Flee – 도망 Flee
  • 6. 몬스터 AI 구현 <Monster.cs> private enum State { Init, //make sure that everything we need is here Idle, //do nothing Move, //random moving //Setup, //assign the values to the things we need //Search, //find the player Chase, //move to player Attack, //attack the player Retreat, //retreat to spawn point Flee //run to the nearest spawn point with another mob }
  • 7. 몬스터 AI 구현 void Start() { _state = MonsterObject.State.Init; StartCoroutine(IdleFSM(5.0f)); } private IEnumerator IdleFSM(float waitTime) { while(_alive) { // Debug.Log("Alive: " + _alive); switch(_state) { case State.Init: Init(); break; case State.Idle: Idle(); break; case State.Move: Move(); break; } yield return new WaitForSeconds(waitTime); } }
  • 8. 몬스터 AI 구현 private IEnumerator BattleFSM() { while(_alive) { // Debug.Log("Alive: " + _alive); switch(_state) { case State.Chase: Chase(); break; case State.Attack: Attack(); break; case State.Retreat: Retreat(); break; case State.Flee: Flee(); break; } yield return null; } }
  • 9. 몬스터 AI 구현 void Update () { Debug.DrawLine(_target.transform.position, _myTransform.position, Color.yellow); if(_balttle == false){ if(Vector3.Distance(_target.position, _myTransform.position) > maxCloseDistance && Vector3.Distance(_target.position, _myTransform.position) < findPlayerDistance){ Debug.Log("***Battle Start***"); _balttle = true; StopCoroutine("IdleFSM"); StartCoroutine("BattleFSM"); _state = MonsterObject.State.Chase; } } }
  • 10. FSM의 활용 • 스스로 여러개의 상태를 갖고 스스로 상태를 변화시키는 모든 객체에 활용 가능 – Ex. MonsterGenerator, AnimateSprite컴포넌트