'유니티/스크립트'에 해당되는 글 123건

  1. 2014.06.02 몇초후에 자동으로 삭제해주기 (2)
  2. 2014.06.02 적 생성 지점 표시하기
  3. 2014.05.29 유니티 내에서 시간 표시하기 00:00 형식
  4. 2014.05.26 유니티 현재 실행중인 애니메이션 상태 받아오기
  5. 2014.05.26 유한상태기계 예 스크립트(몬스터 관련) (1)
  6. 2014.05.26 총알의 입사각을 구해서 반대편으로 이펙트 효과 나오게하기
  7. 2014.05.26 유니티 빈 게임 오브젝트 화면에 표시하기.
  8. 2014.05.26 유니티 충돌을 감지할때 필수 조건
  9. 2014.05.26 총알 발사 관련 스크립트
  10. 2014.05.26 내부 클래스를 인스펙터에 표현하기

몇초후에 자동으로 삭제해주기

|
Trackback 0 And Comment 2
  1. BlogIcon 닐리리아 2014.06.07 13:10 address edit & del reply

    씬에도 적용되는가요?

적 생성 지점 표시하기

|
액션게임에서 적이 생성되기 전 생성지점을 표시하는 스크립트

-> 



 
 켜졌다 작아졌다 하기



Trackback 0 And Comment 0

유니티 내에서 시간 표시하기 00:00 형식

|

ToString 를 사용하면 시간이 00.00 형식으로 나온다.
이 형식을 사용해서 Replace 를 사용하면 점(.) 을 : 로 변경할수있다.
결국 최종 결과물은 00:00 형식으로 나온다.


Trackback 0 And Comment 0

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

|


현재 수행중인 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 컴포넌트가 추가돼 있어야 한다

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


Trackback 0 And Comment 0

총알 발사 관련 스크립트

|
Trackback 0 And Comment 0

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

|

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

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

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







Trackback 0 And Comment 0
prev | 1 | 2 | 3 | 4 | 5 | ··· | 13 | next