'2014/05/26'에 해당되는 글 10건

  1. 2014.05.26 유니티 현재 실행중인 애니메이션 상태 받아오기
  2. 2014.05.26 유한상태기계 예 스크립트(몬스터 관련) (1)
  3. 2014.05.26 총알의 입사각을 구해서 반대편으로 이펙트 효과 나오게하기
  4. 2014.05.26 유니티 빈 게임 오브젝트 화면에 표시하기.
  5. 2014.05.26 처리 속도가 빠른 Collider
  6. 2014.05.26 유니티 충돌을 감지할때 필수 조건
  7. 2014.05.26 총알 발사 관련 스크립트
  8. 2014.05.26 내부 클래스를 인스펙터에 표현하기
  9. 2014.05.26 카메라 추적 스크립트
  10. 2014.05.26 GetComponent 사용법

유니티 현재 실행중인 애니메이션 상태 받아오기

|


현재 수행중인 State 는 GetCurrentAnimatorStateInfo(int layerIndex)를 이용해 가져올수 있고
Animator의 모든 객체는 Hash를 이용해 접근 가능하다.

StringToHash 에 전달하는 인자는 "레이어 이름 + 점(dot) + 스테이트 이름" 규칙을 가지고 있다.


StringToHash는 반환값으로 int 형을 반환한다.->해쉬테이블에서 찾아서 반환해주므로
Start 함수에서 미리 값을 받고 비교해주는게 최적화에 도움이 된다.

ex)

int hashGoHit = 0;
void Start()
{
hashGoHit = Animator.StringToHash("Base Layer.gothit");
}

void Update()
{
  if(animator.GetCurrentAnimatorStateInfo(0).nameHash == hashGoHit)
  {
    // 처리구문.
  }
}


Trackback 0 And Comment 0

유한상태기계 예 스크립트(몬스터 관련)

|

유니티를 사용할때 유한상태기계(FSM) 기법을 많이 사용한다.
유니티 자체에 제공하는 애니메이션 시스템도 유한상태기계를 사용하고 있어서 코딩을 할때도 이 기법을 사용하면 관리하기 편하다.

enum 으로 몬스터의 상태를 설정해주고
각 상태를 체크 해주며, 특정조건에 따라 상태를 변경 시켜준다.
여기선 코루틴을 사용하여 0.2초마다 몬스터의 상태를 체크해주어서 최적화를 시켜주었다.( 코루틴을 사용하지 않으면 매 프레임마다
체크를 하므로 성능이 저하될 우려가 있음.) 

대강 흐름도는 이렇다.

void Start () 
{
StartCoroutine(this.CheckMonsterState());
StartCoroutine(this.MonsterAction());
}

CheckMonstState 에서는 0.2초 간격으로 몬스터의 상태를 체크해준다.

플레이어와의 거리가 공격사정거리보다 가까우면 -> 몬스터의 상태를 공격상태로 변경하고
플레이어와의 거리가 추적사정거리보다 가까우면 -> 몬스터의 상태를 추적상태로 변경한다.
그것도 아니라면 몬스터의 상태를 idle 상태로 변경한다.

MonstAction 에서는 switch 에서 각각의 상태에 따라 추적을 중지하거나 추적을 시작한다.





Trackback 0 And Comment 1
  1. Favicon of http://m.openwiki.kr/game/gta/gta_5 BlogIcon dryoo 2015.05.25 11:36 address edit & del reply

    감사합니다. ^

총알의 입사각을 구해서 반대편으로 이펙트 효과 나오게하기

|


입사 각도이 반대 벡터는 벡터의 빼기 연산으로 산출함( 발사 원점 벡터 - 충돌 지점 벡터) -> 충돌 지점에서 발사 원점을 바라보는 벡터가됨

입사각 = 충돌지점 - 발사원점
반대각 = 발사원점 - 충돌지점


 

-------->

(발사원점)ㅁ                ㅁ(충돌지점)

                <-------


//입사각도의 반대 벡터 = 발사 원점 - 충돌지점

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); //반사각




Trackback 0 And Comment 0

유니티 빈 게임 오브젝트 화면에 표시하기.

|

2가지 방법이 있습니다.

코딩으로 표시하기 및 인스펙터에있는 기즈모 옵션으로 표시하는 것입니다.


빈게임 오브젝트에 다음 스크립트를 작성하면 기즈모를 표시할수있습니다.








Trackback 0 And Comment 0

처리 속도가 빠른 Collider

|

유니티로 게임을 제작할때 퍼포먼스에 신경을쓰일때가 많다.

collider 에도 처리속도가 각각 다르다


Sphere Collider > Capsule Collider > Box Collider 순으로 처리속도가 빠르다.

'유니티 > Note' 카테고리의 다른 글

유니티 카메라에 따른 해상도 관련  (0) 2014.05.27
유니티 리소스 관리 법  (0) 2014.05.27
처리 속도가 빠른 Collider  (0) 2014.05.26
GetComponent 사용법  (0) 2014.05.26
쉽게 에셋스토어 접속하기  (0) 2014.05.25
youtube 관련 동영상 정리  (0) 2014.05.23
Trackback 0 And Comment 0

유니티 충돌을 감지할때 필수 조건

|

- 충돌을 일으키는 양쪽 게임오브젝트는 반드시 모두 collider 컴포넌트가 추가돼 있어야 한다

- 두 게임오브젝트 중 움직이는 쪽에는 반드시 Rigidbody 컴포넌트가 있어야 한다.


Trackback 0 And Comment 0

총알 발사 관련 스크립트

|
Trackback 0 And Comment 0

내부 클래스를 인스펙터에 표현하기

|

[System.Serializable]를 사용하면 스크립트 안의 class 나 struct 를 인스펙터 상에 표현할수 있다.

보통 최상위의 오브젝트에 스크립트를 할당하게 되는데, 그 하위 오브젝트에 Animation 같은 컴포넌트를 관리하기 위해서 사용된다.

변수를 사용해서 일일히 다 선언해도 같은 효과를 발생시키지만 클래스나 구조체를 사용하면 좀더 깔끔하게 관리할수있다.







Trackback 0 And Comment 0

카메라 추적 스크립트

|
Trackback 0 And Comment 0

GetComponent 사용법

|

4가지


1. Transform tr = GetComponent<Transform>();

2. Transform tr = gameObject.GetComponent<Transform>();

3. Transform tr = (Transform) GetComponent("Transform");

4. Transform tr = (Transform) GetComponent(typeof(Transform));




'유니티 > Note' 카테고리의 다른 글

유니티 리소스 관리 법  (0) 2014.05.27
처리 속도가 빠른 Collider  (0) 2014.05.26
GetComponent 사용법  (0) 2014.05.26
쉽게 에셋스토어 접속하기  (0) 2014.05.25
youtube 관련 동영상 정리  (0) 2014.05.23
스크립트 실행 순서 제어  (0) 2014.05.06
Trackback 0 And Comment 0
prev | 1 | next