본문 바로가기
Development/C#

[멋쟁이사자처럼 부트캠프 TIL 회고] Unity 게임 개발 3기 8일차

by Mobics 2024. 11. 28.

 

목차


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

    1. 캐릭터 Leg에 Empty GameObject를 추가하여 Anchor 변경하기

     

    2. Animation 사용하여 걷는 모션 만들기

     

    3. Animator 수정

    : Key는 bool 타입

    4. Character에 Code 추가

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CharacterMovement : MonoBehaviour
    {
        private float h = 0f;
        private float v = 0f;
    
        public float moveSpeed = 5f;
        public float jumpPower = 5f;
    
        public bool isGround = false;
    
        public Animator anim;
    
        void Update()
        {
            Move();
    
            Jump();
        }
    
        private void Jump()
        {
            if (Input.GetKeyDown(KeyCode.Space) && isGround == true)
            {
                GetComponent<Rigidbody>().AddForce(Vector3.up * jumpPower, ForceMode.Impulse);
            }
        }
    
        private void Move()
        {
            h = Input.GetAxis("Horizontal");
            v = Input.GetAxis("Vertical");
    
            Vector3 dir = new Vector3(h, 0f, v);
            Vector3 dirnor = dir.normalized;
    
            float fixSpeed = Mathf.Min(dir.magnitude, 1.0f) * moveSpeed; // 대각선 이동 시, 속도 처리
    
            transform.position += fixSpeed * Time.deltaTime * dirnor;
    
            if (h != 0 || v != 0) // h나 v나 아무 키나 하나는 누른 상태
            {
                Vector3 targetPos = transform.position + dirnor;
                transform.LookAt(targetPos);
    
                // Walk Animation
                anim.SetBool("isWalk", true);
            }
            else // h == 0 && v == 0 --> h나 v나 아무 키도 누르지 않은 상태
            {
                anim.SetBool("isWalk", false);
            }
        }
    }

    ※ Animation Detail 잡기

    1. Has Exit Time

    : 애니메이션 전환이 끝나기 전에 트랜지션 할지 여부  --> 체크 해제 (애니메이션이 실행 중이더라도 플레이어의 입력이나 다른 이벤트에 의해 종료될 수 있음)

     

    2. Transition Duration

    : Animator의 Transition(화살표) 지연 시간 --> 0으로 만들기

     

    3. Blend

    : 애니메이션이 갑자기 급변하는 것을 방지해주는 것 --> 애니메이션을 생성하면 자동으로 생성됨

    >> 두 다리가 교차하는 순간이 부자연스러움 --> 중간에 교차하는 구간은 그래프가 가파르게 직선으로 만나서 이질감 없이 실행되는데, 처음과 끝에는 Animation Blend가 들어가서 그래프가 완만하게 만남

    >> 결과


    Light

    Light의 종류

    • Directional Light : 직선의 모든 범위 --> 위치 상관없이 전방향에서 빛을 직선으로 쏴줌
    • Point Light : Sphere 모양의 범위 --> 가운데가 제일 밝고 멀수록 어두워짐
    • Spotlight : Cone 모양의 범위 --> 주로 손전등에 많이 사용됨
    • Area Light : 사각형 or 타원 모양의 범위 --> 특정 지역에 빛을 만들어주는 Static Light(정적 라이트)로, Static 설정 필요

    ※ Realtime <-> Baked (미리 만들어 둔 것)

     

    낮과 밤 만들기

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class LightRotation : MonoBehaviour
    {
        public float rotspeed = 10f;
    
        private void Update()
        {
            // 어떤 대상을 계속 회전시키는 기능
            transform.Rotate(rotspeed * Time.deltaTime * Vector3.right);
        }
    }

     

    [예제] 손전등 만들기

    https://assetstore.unity.com/packages/3d/props/electronics/flashlight-18972

     

    Flashlight | 3D 전자제품 | Unity Asset Store

    Elevate your workflow with the Flashlight asset from RRFreelance. Find this & other 전자제품 options on the Unity Asset Store.

    assetstore.unity.com

    1. 코드 작성 --> 'F' 를 누르면 On/Off

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class FlashLight : MonoBehaviour
    {
        public GameObject spotLight;
        // 빛의 세기나 범위 등을 건드릴 것이었다면 Light Component에 접근했겠지만,
        // 여기선 손전등을 On/Off 할 것이기 때문에 GameObject에 접근
    
        public bool isFlashLight = false;
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.F))
            {
                isFlashLight = !isFlashLight;
                spotLight.SetActive(isFlashLight);
            }
        }
    }

     

    2. Object에 Code 적용 --> Flashlight(손전등)에 Script를 넣고 변수로는 Spotlight 넣기

    ※ Spotlight Inspector

    • Range : 길이
    • Spot Angle : 범위
    • Color : 색상
    • Intensity : 강도

     

    ※ 빛이 물체를 관통하지 않게 하려면 Shadow Type을 바꾸기

     

    ※ 빛에 모양 넣기

    : Cookie 이미지 활용

     

    ※ 이미지 주변을 어떻게 처리할지

     

    >> Repeat으로 설정하면


    Skybox

    https://assetstore.unity.com/packages/2d/textures-materials/sky/free-stylized-skybox-212257

     

    Free Stylized Skybox | 2D 하늘 | Unity Asset Store

    Elevate your workflow with the Free Stylized Skybox asset from Yuki2022. Browse more 2D 텍스처 및 소재 on the Unity Asset Store.

    assetstore.unity.com

    >> 단축키 : Ctrl + 9

     

    ※ 적용하는 법

    >> 환경광이 있어서 Skybox를 바꾸면 빛(조명)도 바뀐다.

    ※ Skybox 방식

    • Cube Map 방식
    • Sided 방식
    • Panorama 방식

     

    [실습] Flappy Bird 2D_01

    게임 해상도 설정

    배경 이미지 배치

    1. Canvas와 Image --> Canvas의 자식으로 Image 배치

     

    2. Image에 배경 추가

    Image : 일반적인 이미지 파일을 보여줄 수 있는 UI

     

    3. 배경을 크기에 맞게 확장

    : 그냥 누르면 Anchor만 바뀌지만, Alt + Click하면 Position과 Anchor 전부 바뀜 --> Alt + Click

     

    4. Canvas 설정 --> 2D에 맞게 환경 설정

    Canvas : UI를 배치할 수 있는 도화지 역할 --> 모든 UI는 Canvas 내부에 존재해야한다.)

     

    >> Render Mode

    : Screen Space - Overlay로 설정

    • Screen Space - Overlay : Canvas가 Scene 내부 아무 곳에 위치해도 Game Scene 전체를 덮는 형식으로 렌더링 --> Scene에 Camera가 아예 없는 경우에도 UI가 렌더링된다.
    • Screen Space - Camera : Camera를 지정해, 해당 Camera에 일정 거리에 위치한 평면 Object 위에 Draw 되는 것처럼 렌더링 --> Scene 안의 3D Object 중 UI 평면보다 Camera에 가까운 모든 Object는 UI 앞에 렌더링되고, UI 평면 뒤의 Object는 가려진다.
    • World Space : UI가 Scene 안에 있는 모든 평면 Object인 것처럼 렌더링 --> UI가 항상 Camera를 향하지 않으며, 무조건 UI가 Camera에서 일정 거리 떨어진채로 Camera를 향하는 게 아니라 그 위치에 있는 Object처럼 렌더링한다. 따라서 거리에 따라 크리가 달라지고 방향도 달라진다.

     

    >> UI Scale Mode

    : Scale With Screen Size로 설정 후, Reference Resolution을 설정한 게임 해상도와 동일하게 1920x1080으로 설정

    ※ 일반적으로 Scale With Screen Size 사용

     

    5. Text(TMP) 추가

    Text : 문자를 적을 수 있는 UI

    >> 구버전은 기능이 단순하고 더 흐리게 나옴 --> 신버전 사용

     

    >> 내용 바꾸기

     

    ※ 한글을 넣으면 깨짐 --> Font를 넣어서 해결

     

    >> Text 정렬

    Font 넣기

    : Font 파일을 Font Asset 파일로 바꿔야 Font를 적용 가능

     

    >> Font Asset 생성

     

    ※ 필요에 따라 범위 설정 필요

    32-126,44032-55203,12593-12643,8200-9900
    • 32-126 : 영어
    • 44032-55203 : 한글의 범위
    • 12593-12643 : 한글 자모음
    • 8200-9900 : 특수문자

     

    ※ Font Asset Creator 여는 법

    1.

     

    2.