본문 바로가기
게임 개발(유니티)/멋쟁이 사자처럼 3기_회고록

[멋쟁이사자처럼 유니티 TIL] 2024_11_28(목) 강의 요약 및 정리

by goraku97 2024. 12. 1.

[예제] 캐릭터 애니메이션 만들기

 

- 다리 왼/ 오른쪽에 새로운 빈 오브젝트를 자식으로 생성후에, 캐릭터의 허리(y축이동) 

  까지 이동시키기(하이어라키 상에서 만들지 말기!)

- 프리팹 상태에서 자식/ 부모 관계를 바꿔야 할때는, 프리팹을 깬다음

  (Prefab -> UnPack Completely) 설정하면 오류가 뜨지 않음.

- 에니메이터에서 한 번만 실행하는 애니메이션은 Any State 에 연결되어야함.

- 에니메이터에서 반복하는 애니메이션은 Entry 에 연결되어야함.

- 파리미터를 코드에서 Set으로 사용힐 때는 다음의 코드들이 있다.

   Float ->SetFloat(), Int -> SetInteger(), Bool ->SetBool(), Trigger -> SetTrigger()

- 키를 눌렀을떄 이동하는 애니메이터를 만들려변 Bool 파라미터를 생성.

  (Bool 값은 이름을 설정할 때 앞에 is 를 자주 붙임)

- 애니메이터의 Has Exit Time체크를 헤제하면 애니메이션이 즉각적으로 실행

- 애니메이터의 Transition Duration 0으로 하면 애니메이션의 지연이 없어짐.

 

&그리고 기존의 캐릭터를 이동시키는 스크립트(Input Study) 에, 

  키를 눌렀을때만 걷는 애니메이션이 실행되도록, 하기의 코드를 추가

 

 public Animator anim; 

// Animator 타입의 anim 변수 선언. Inspector 창에서 제어해야하는 애니메이션을

  넣어야 하기 때문에, 접근제한자를 public 으로 삼고, 해당 코드를 작성. 

 

if ( h == 0 && v == 0){ anim.SetBool("isWalk", false);}

// 좌우 나 상하, 그 어떤 키든 누르지 않았을때( h == 0 && v == 0 ) if 문이 true 가

   되어 하기의 코드를 실행.

    anim Bool 파라미터의 isWalk false 로 설정해서, 캐릭터의 애니메이션이

    재생되지 않게 함.

 

else{anim.SetBool("isWalk", true);}

// 상하좌우 중, 키를 하나라고 눌렀을 경우, 상기의 if 문 대신 else 가 true  가 되어,

   하기의 코드를 실행

   anim  Bool 파라미터의 isWalk  true 로 설정해서, 캐릭터의 애니메이션이

    재생되게 함.

 

[예제] 라이트 오브젝트 제작

 

라이트가 평소에는 꺼져있다가, 특정 키를 눌렀을때만 켜지도록하는 스크립트를 작성.

SetActive() 는 객체를 활성화하는 함수

 

public GameObject spotLight;

// 설정할 손전등 오브젝트를 명시하기 위해 해당 코드를 작성.

  public 이기 때문에, Inspector 창에서 GameObject 타입의 변수를 선언 가능

 

private bool SpotLight = false;

// SpotLight 의 초기값을 false 로 선언함으로서, 평상시에는 라이트가 꺼진 상태가 됨.

  ( SpotLight 오브젝트를 비활성화 시키는 코드)

 

void Update(){if (Input.GetKeyDown(KeyCode.F))

// 하기의 코드가 매 프레임마다 지속되어야하기 때문에,  Update 함수를 사용

   만약, F 키를 눌렀을경우, if 문이 true 가 되어 하기의 코드를 실행.

   (if (Input.GetKeyDown(KeyCode.F)))

 

Debug.Log("켜짐");

// "켜짐" 이라는 로그를 콘솔창에 생성.

 

SpotLight = !SpotLight; 

// SpotLight 가 켜진상태(true) 면 false, SpotLight 가 꺼진 상태면(false) 면 true

   로 바꾸는 코드.( SpotLight = !SpotLight;)

 

spotLight.SetActive(SpotLight);

// 상기의 코드(SpotLight = !SpotLight) 에서 나온 값(true, false) 에따라

  spotLight 의 변수로 있는 SpotLight 를 활성화(값이 true 면 활성화)

  비활성화(값이 false 면 비활성화) 시킴.