[멋쟁이사자처럼 부트캠프 TIL 회고] Unity 게임개발 3기 10일차
캐릭터 다리 움직이기
축 변경
우선 축 변경을 해 준다, 저번에 배웠던 것처럼 빈 게임 오브젝트를 만들고 pivot 설정을 해 주어야 자연스러운 움직임을 구현할 수 있다.
![]() |
![]() |
* 대칭인 물체에 회전축을 설정할 때, 물체의 자식으로 오브젝트를 생성하고 옮겨 piovt점을 설정한 후, 좌표를 복사하고, 반대 물체에도 똑같이 자식 오브젝트 생성 -> 좌표 붙여넣기를 통해 대칭인 pivot점을 설정할 수 있다.(이후 계층관계 변경) // 자식 오브젝트는, 부모 오브젝트 기준으로 좌표가 설정되기 때문에 이런것이 가능하다.
애니메이션 추가
애니메이션 창을 열고 , 움직일 물체들(다리 두 짝)을 선택한 후 움직일 애니메이션을 설정한다.
![]() |
![]() |
이제 애니메이션이 걸을 때에만 작동하도록 코드와 Animator를 조작한다.
![]() |
![]() |
저번 '문 애니메이션' 상황과는 다르게, 우리는 한 번만 실행하는 애니메이션이 아닌, 걷는 중에는 계속 실행되는 걷기 애니메이션을 만들 것이므로 Any state에서 연결하지 않고, 반복적으로 실행되는 Entry 함수에서 New state로, 그리고 우리가 실행할 CharacterMove 애니메이션으로 Transition을 이어준다. ( 키를 뗐을 때 돌아가야 하므로 반대 방향으로도 이어준다)
다음으로는 W,A,S,D 를 눌렀을 때에만 애니메이션이 작동할 수 있도록 조건식을 작성한다.
네 가지 타입의 parameter중에는 Bool값을 사용한다.
다음 코드를 캐릭터 이동 스크립트에 넣어주고
Public Animator anim // anim 타입의 변수 anim 선언
private void Move() //캐릭터 이동 관련 기능
{
if (h == 0 && v == 0) // 아무런 키도 누르지 않았을 경우
{
anim.SetBool("isWalk", false);
}
else // 이동 키 중 어떤 키라도 눌렀을 경우
{
anim.SetBool("isWalk", true);
}
}
변수 anim에 character animator를 넣어주면 된다.
이는 public으로 변수 선언을 해 주었기 때문이며 원래 스크립트를 통해 조작하는 경우가 훨씬 많다.
애니메이션 다듬기
애니메이션은 만들어졌지만, 아직 동작이 부자연스럽다. 다음과 같은 과정을 통해 애니메이션을 다듬어 준다.
(좌측 위부터 차례로)
1. Has Exit Time : 애니메이션 탈출 시간이 있으면 애니메이션이 일정 비율 이상 재생된 후에만 다음 상태로 전환된다.
2. Transition Duration : 전환이 발생하는 동안 두 애니메이션 클립이 서로 겹쳐지는 시간의 길이를 초 단위 비율로 나타낸 것이다.
3. 애니메이션을 생성하면 자동적으로 Blending이 된다.
4. 직접 애니메이션 창에서 Curve를 바꿔주면서 자연스럽게 만들어준다.
![]() |
![]() |
![]() |
![]() |
참고 : https://docs.unity3d.com/kr/2018.4/Manual/class-Transition.html
애니메이션 전환 - Unity 매뉴얼
애니메이션 전환(Animation transitions)을 사용하면 상태 머신이 하나의 애니메이션 상태에서 다른 애니메이션 상태로 전환하거나 혼합될 수 있습니다. 전환은 상태 간의 혼합이 가져야 하는 기간뿐
docs.unity3d.com
LIGHT
Light의 종류
Light는 네 가지 종류가 있다.
참고 : https://docs.unity3d.com/kr/2018.4/Manual/Lighting.html
광원 타입 - Unity 매뉴얼
이 섹션에서는 Unity에서 광원을 만드는 여러 가지 방법에 대해 자세하게 설명합니다.
docs.unity3d.com
Light의 Component
![]() |
![]() |
참고 : https://docs.unity3d.com/kr/2018.4/Manual/class-Light.html
광원 인스펙터 - Unity 매뉴얼
광원은 오브젝트의 음영(shading)과 오브젝트가 드리우는 그림자를 결정합니다. 따라서 광원은 그래픽 렌더링의 필수적인 부분입니다. Unity 에디터에서 사용하는 조명의 개념에 대한 자세한 내용
docs.unity3d.com
*주의 : SpotLight는 이미 있는 Component로 스크립트를 짤 때에 주의해야 한다.
손전등 만들기
위에서 공부한 Light를 바탕으로 손전등을 만들어준다. 사용할 코드는 SetActive(true/false)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FlashLight : MonoBehaviour
{
public GameObject spotLight;
public bool isFlashLight;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.F))
{
isFlashLight = !isFlashLight; //현재 상태의 반대
spotLight.SetActive(isFlashLight); // 존재를 키는것
}
}
}
F키를 눌렀을 때, isFlashLight로 이름지은 변수의 참/거짓의 상태가 바뀌게 해 준다.
그리고 참값이라면 spotLight의 존재가 켜 지고, 거짓이라면 꺼지게 설정한다.
*빛에 그림 등을 넣어 모양을 다르게 할 수 있다, Resource들을 cookie type으로 변경해서 사용하면 된다.
SkyBox
Asset을 끓어서 Scene 상의 하늘에 배치할 수도, 다음과 같은 방식으로 변경할 수도 있으며 skybox의 방식은 아래 3가지가 있다.
Skybox는 환경광, 주변광 이라고 부르며 지워도 material이 없는 것일뿐 물체는 보인다.
![]() |
![]() |
![]() |
![]() |
![]() |
UI
UI의 기본
UI : User Interface(사용자 인터페이스)의 준말, 사용자와의 상호작용을 편리하게 하기 위해 화면에 붙어 있는 무언가.
Drop down, text, scroll view, button 등이 있다.
UI의 종류
화면상에 딱 붙은 Overlay UI
3차원 공간상에 존재하는 World UI
참고 : https://docs.unity3d.com/kr/2022.1/Manual/UICanvas.html
캔버스 - Unity 매뉴얼
모든 UI 요소는 Canvas 안에 위치해야 합니다. 캔버스는 Canvas 컴포넌트가 있는 게임 오브젝트이며 모든 UI 요소는 반드시 어떤 캔버스의 자식이어야 합니다.
docs.unity3d.com
Canvas
Canvas
: Unity에서 UI를 배치할 수 있는 도화지 개념
모든 UI 요소들은 Canvas 안에 위치해야 하고, UI를 생성하면 자동으로 자식관계로 들어가게 된다.
Canvas Scalr : UI 요소의 크기와 스케일 방식을 설정하는 Component,
주로 해상도에 맞게 변하는 Scale with Screen size 사용 (해상도 넣어주기를 해야함)
UI의 Anchor ( UI의 Pivot 점), 기준점
다음과 같은 방식으로 Anchor를 적용하고, 이미지를 설정하는 등의 방법을 쓸 수 있다.
![]() |
![]() |
*Alt + 클릭으로 전부 변경시킬 수 있음(오른쪽)// 기본은 Anchor만 변경됨
Text와 Font
TMP(신버전) 와 Legacy text(구버전)
한글이 깨져서 나오는 경우가 있으나 TMP 사용을 권장한다.
Font를 바꾸는 방법은, 우선 사용하고 싶은 글꼴을 받고 다음과 같이 진행한다.
*특정 언어만 지원하는 폰트에 주의
더해, 다른 나라의 언어를 지원하는 경우 Font Asset Creator를 사용하면 된다.
알아두면 좋을 사항들
Prefabs
Unpack PREFABS와 Compeletly unpack의 차이
프리팹은 깨고 다시 만드는데 큰 부담을 가질 필요는 없음
프리팹 배리언트
https://docs.unity3d.com/kr/2018.4/Manual/PrefabVariants.html
프리팹 배리언트 - Unity 매뉴얼
프리팹 배리언트는 프리팹의 사전 정의된 배리에이션 집합이 필요할 때 유용합니다.
docs.unity3d.com
애니메이션 프레임
프레임 따라서 이동이 되었던 처음처럼, 애니메이션도 컴퓨터의 사양에 따라 속도가 다르지 않을까 ?
아니다. 애니메이션은 Target Fps를 잡고 들어가기 때문에 괜찮다. 자세한 내용은 아래 참
https://docs.unity3d.com/kr/2022.3/Manual/AnimationScripting.html
애니메이션 스크립팅(레거시) - Unity 매뉴얼
Unity의 애니메이션 시스템은 멋지게 애니메이션화된 캐릭터를 만들 수 있게 합니다. 이 시스템은 애니메이션 블렌딩, 믹싱, 애니메이션 더하기, 걷기 모션 순환 시간 동기화, 애니메이션 레이어,
docs.unity3d.com
ETC...
*Update는 컴퓨터 사양에 따라, Fixed Update는 물리계산에 사용하는 고정식이다.
* 과거에는 Built-in 방식을 사용하는 기업도 많았으나 요새는 많이 URP 방식으로 바뀌었다.
*물리적인 계산을 할 때에는 Fixed Update 함수를 쓰나, 우리가 Jump를 구현할 때처럼 한 번만 힘을 가할때에는 쓰지 않아도 된다. (자세하게 알아보기)
*추가로 Bake 전용인 Area Light가 뭔지 공부해보자
오늘도 끝 ! 내용이 생각보다 느리나, 기초를 탄탄히 쌓는다는 생각으로 다시 보고 또 보자, 추가적으로 지금까지 배운 내용만으로도 구현할만한 게임은 없을까 ? 꼭 복잡하거나 많은 것이 들어가 있다고 해서 좋은 게임은 아니니까.