유니티를 사용할때 유한상태기계(FSM) 기법을 많이 사용한다.
유니티 자체에 제공하는 애니메이션 시스템도 유한상태기계를 사용하고 있어서 코딩을 할때도 이 기법을 사용하면 관리하기 편하다.
enum 으로 몬스터의 상태를 설정해주고
각 상태를 체크 해주며, 특정조건에 따라 상태를 변경 시켜준다.
여기선 코루틴을 사용하여 0.2초마다 몬스터의 상태를 체크해주어서 최적화를 시켜주었다.( 코루틴을 사용하지 않으면 매 프레임마다
체크를 하므로 성능이 저하될 우려가 있음.)
대강 흐름도는 이렇다.
void Start ()
{
StartCoroutine(this.CheckMonsterState());
StartCoroutine(this.MonsterAction());
}
CheckMonstState 에서는 0.2초 간격으로 몬스터의 상태를 체크해준다.
플레이어와의 거리가 공격사정거리보다 가까우면 -> 몬스터의 상태를 공격상태로 변경하고
플레이어와의 거리가 추적사정거리보다 가까우면 -> 몬스터의 상태를 추적상태로 변경한다.
그것도 아니라면 몬스터의 상태를 idle 상태로 변경한다.
MonstAction 에서는 switch 에서 각각의 상태에 따라 추적을 중지하거나 추적을 시작한다.
'유니티 > 스크립트' 카테고리의 다른 글
| 유니티 내에서 시간 표시하기 00:00 형식 (0) | 2014.05.29 |
|---|---|
| 유니티 현재 실행중인 애니메이션 상태 받아오기 (0) | 2014.05.26 |
| 유한상태기계 예 스크립트(몬스터 관련) (1) | 2014.05.26 |
| 총알의 입사각을 구해서 반대편으로 이펙트 효과 나오게하기 (0) | 2014.05.26 |
| 유니티 빈 게임 오브젝트 화면에 표시하기. (0) | 2014.05.26 |
| 유니티 충돌을 감지할때 필수 조건 (0) | 2014.05.26 |
Trackback 0 And
Comment 1
입사 각도이 반대 벡터는 벡터의 빼기 연산으로 산출함( 발사 원점 벡터 - 충돌 지점 벡터) -> 충돌 지점에서 발사 원점을 바라보는 벡터가됨
입사각 = 충돌지점 - 발사원점
반대각 = 발사원점 - 충돌지점
-------->
(발사원점)ㅁ ㅁ(충돌지점)
<-------
//입사각도의 반대 벡터 = 발사 원점 - 충돌지점
Vector3 relativePos = firePos - coll.transform.position;
입사각, 반사각, 법선벡터
당구게임에서 당구공이 벽에 충돌해 반대쪽으로 튕겨나가는 로직에 필요한것이 반사각이다.
반사각을 구하기 위해서는 입사각가 법선벡터가 필요함
입사각 = 충돌지점 - 출발지점
반사각 = Vector3.Reflect(입사각, 법선벡터) fh rngkftndlTdma
Vector3 incomingVector = coll.transform.position - firePos ; //입사각
Vector3 inverseVector = - incomingVector; //입사각의 반대각
Vector3 normalVector= coll.contacts[0].normal; //법선벡터
Vector3 reflectVector = Vector3.Reflect(incomingVector, normalVector); //반사각
'유니티 > 스크립트' 카테고리의 다른 글
| 유니티 현재 실행중인 애니메이션 상태 받아오기 (0) | 2014.05.26 |
|---|---|
| 유한상태기계 예 스크립트(몬스터 관련) (1) | 2014.05.26 |
| 총알의 입사각을 구해서 반대편으로 이펙트 효과 나오게하기 (0) | 2014.05.26 |
| 유니티 빈 게임 오브젝트 화면에 표시하기. (0) | 2014.05.26 |
| 유니티 충돌을 감지할때 필수 조건 (0) | 2014.05.26 |
| 총알 발사 관련 스크립트 (0) | 2014.05.26 |
Trackback 0 And
Comment 0
2가지 방법이 있습니다.
코딩으로 표시하기 및 인스펙터에있는 기즈모 옵션으로 표시하는 것입니다.
빈게임 오브젝트에 다음 스크립트를 작성하면 기즈모를 표시할수있습니다.
'유니티 > 스크립트' 카테고리의 다른 글
| 유한상태기계 예 스크립트(몬스터 관련) (1) | 2014.05.26 |
|---|---|
| 총알의 입사각을 구해서 반대편으로 이펙트 효과 나오게하기 (0) | 2014.05.26 |
| 유니티 빈 게임 오브젝트 화면에 표시하기. (0) | 2014.05.26 |
| 유니티 충돌을 감지할때 필수 조건 (0) | 2014.05.26 |
| 총알 발사 관련 스크립트 (0) | 2014.05.26 |
| 내부 클래스를 인스펙터에 표현하기 (0) | 2014.05.26 |
Trackback 0 And
Comment 0





