목차
[예제] 캐릭터 애니메이션 만들기
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.
'Development > C#' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL 회고] Unity 게임 개발 3기 10일차 (0) | 2024.12.02 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL 회고] Unity 게임 개발 3기 9일차 (1) | 2024.11.30 |
[멋쟁이사자처럼 부트캠프 TIL 회고] Unity 게임 개발 3기 7일차 (3) | 2024.11.27 |
[멋쟁이사자처럼 부트캠프 TIL 회고] Unity 게임 개발 3기 6일차 (0) | 2024.11.26 |
[멋쟁이사자처럼 부트캠프 TIL 회고] Unity 게임 개발 3기 5일차 (0) | 2024.11.25 |