object 비활성화 단축키
alt + shift + a
캐릭터 원점 정렬
땅 위로 올려줘야 하는 상황

1. 빈 게임 오브젝트 생성하여 기준 오브젝트 만들기

2. 위치 정렬이 필요한 오브젝트들 넣어주기(drag & drop)

3. 위치 정렬이 필요한 오브젝트들을 올려주기(모델링해서 가져온 게 아니라서 눈대중으로만! ⇒ 임시용)

완성


프리팹 Prefab
씬 Scnee에 있는 Object를 에셋 Asset으로 포장하는 것
해당 Object를 Drag & Drop하면 됨
Object → Prefab : 원본 데이터 파일이 있다는 것

수정하려면 Prefab을 더블클릭하면 됨

해당 Prefab을 가져올 때 원점 좌표가 반영되기 때문에 원점 좌표가 매우 중요함

캐릭터 Object를 수정해서 수정할 수도 있음
덮어쓰기 할 땐 원본 데이터를 덮어쓰기 때문에 유의해야 함

목록에 뜨는 object는 수정 목록임

Materials 기본 Material로 바꾸기
바꾸고 싶은 Object의 Mesh Renderer - Materials - 더보기 버튼

Select Material에서 Default Material 클릭

Meterial 불투명도 수정

수정했는데도 변화가 없음

-> 기본적으로 Material Rendering Mode가 Opaque로 되어 있어 불투명도 적용이 안된 것처럼 보임
Opaque는 Alpha 값을 무시함


Rendering Mode를 Transparent로 바꾸면 보임
왜 Opaque를 쓰는가? → RGBA가 RGB보다 부하가 심하기 때문
ex. 벽 뒤에 있는 캐릭터 렌더링 유무 등에도 영향을 미칠 수 있음
다양한 렌더링 모드
Opaque
단단한 표면에 색상을 지닌 경우 사용하는 렌더링 모드
대부분 사용하는 머테리얼이며, 단단한 사물에 적용 ex. 돌, 나무, 금, 캐릭터, 옷 등
Cutout
일부 빈 공간이 있는 경우 사용하는 렌더링 모드
단단한 부위와 빈 공간이 섞인 경우 ex. 쇠창살, 창틀


Fade
서서히 변하는 상태가 있는 렌더링 모드
서서히 변화하는 경우 사용 ex. 파워업 아이콘, 홀로그램 등

Transparent
투명한 상태가 있는 렌더링 모드
투명도를 지닌 경우 사용 ex. 창문의 유리창 등

리소스 Material 넣기
다양한 무료 Material 제공하는 사이트가 많음
해당 사이트에서 다운받기
압축 풀어서 Resource 폴더에 드래그하면 유니티가 가져옴

Albedo = main = color
가장 main 이미지

Material 선택 후 Inspector 잠가서 쓰면 더 편함

Albedo 앞의 박스로 drag & drop하면 들어감



Metalic
반사 정도(정반사)
Smoothness : 부드러움거칠기(난반사)
~Roughness 넣으면 됨

Normal Map
울퉁불퉁하게 보이도록 질감 표현

Normal~ 을 넣으면 됨

DX : DirectX
GL : OpenGL
일단 아무거나 넣어도 됨
Height Map
빛의 깊이
Displacement 넣기

Occulsion = AO
환경차폐 - 빛을 더 리얼하게 만들어주는 효과(주변 환경에 따라 서랍의 빛이 안닿는 면을 더 어둡게…)
AmbientOcclusion 넣기

수치 넣을 땐 사칙연산 다 됨

이 모든 작업이 2D 이미지를 3D로 보이도록 렌더링 함
= 최적화 = 눈속임
Tiling
넓은 면적을 격자로 채울 수 있음

Shader
쉐이더마다 수정 가능한(요구하는) 속성이 다 다름
기본은 Standard

Stancil Portal : 한 면에 다른 장면 보여주는 것
정리
Unity C#
선언할 때 아무것도 안쓰면 private로 판단함


public으로 하면 오류 없음

함수도 마찬가지 : 다른 쪽에서 호출 가능



단축키 정리
vscode랑 은근 달라서 넘 헷갈림
열 모드 편집 ⇒ alt + shift + 방향키
한줄 복사
alt + 화살표 ⇒ ctrl + d
vscode가 압도적으로 편한 것 같은 느낌이...적응해서 그런가

SerializeField
: 보안 수준은 유지하지만 인스펙터(Inspector)에서 수정할 수 있는 기능
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Person : MonoBehaviour
{
public int number1 = 20;
private int number2 = 20;
[SerializeField] private float height;
void Walk()
{
}
void Run()
{
}
void Speak()
{
}
}
이렇게 Inspector에서 확인 가능

연산자

++ 연산자
전위 증가 연산자
연산이 수행된 후에 값이 증가
int number1 = 5;
Debug.Log("a++ " + number1++);
// 출력: a++ 5
// 실행 후 number1은 6이 됩니다.
후위 증가 연산자
값을 먼저 증가 시키고 그 증가된 값을 사용
int number2 = 5;
Debug.Log("++b " + ++number2);
// 출력: ++b 6
// 실행 후 number2는 6이 됩니다.
콘솔에 찍어본 결과 같은 타이밍에 실행되었지만 b는 1이 증가된 6부터 찍힘
조건문
예시 : 초보자 사냥터
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IfStudy : MonoBehaviour
{
public int currentLevel = 1;
void Start()
{
if (currentLevel < 10)
{
Debug.Log("초보자 사냥터 사용 가능");
}
}
void Update()
{
}
}
실행해보면 레벨이 1이기 때문에 조건 성립

그렇다면 레벨을 올리면?

조건에 못 들어가서 사용 가능 로그가 안 찍힘

if, else if, else는 js랑 동일한 개념인듯
if (currentLevel < 10)
{
Debug.Log("초보자 사냥터 사용 가능");
}
else if (currentLevel > 10) {
Debug.Log("초보자 사냥터 X");
}
else
{
Debug.Log("레벨이 10이므로, 초보자 사냥터 사용 가능");
}
트랜스폼 Transform
게임 오브젝트의 위치, 회전, 크기


스크립트에서 쓸 수 있음
void Start()
{
transform.position = Vector3.forward; = 0(x), 0(y), 1(z) 좌표값 들어간다고 보면 됨
}
Vector1 = 1차원 벡터 = x축
Vector2 = 2차원 벡터 = x축, y축
Vector3 =3차원 벡터 = x축, y축, z축

left = -right, back = -forward, down = -up

이것과 같음

캐릭터를 앞으로 가게 하는 방식 = 현재 위치 + Vector3.forward;

축약 가능하여 리팩토링
transform.position = transform.position + Vector3.forward;
// A += B
// A = A + B
transform.position += Vector3.forward;
Update에 넣으면 1프레임에 1미터 이동해서 순식간에 사라짐…
void Start()
{
//transform.position = transform.position + Vector3.forward;
// A += B
// A = A + B
transform.position += Vector3.forward;
}
void Update()
{
transform.position += Vector3.forward;
}
점이 되었음

속도 조절을 위한 MoveSpeed 변수 선언
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour
{
public float moveSpeed = 1f;
void Start()
{
//transform.position = transform.position + Vector3.forward;
// A += B
// A = A + B
//transform.position += Vector3.forward;
}
void Update()
{
transform.position += Vector3.forward * moveSpeed;
}
}

천천히 감

shift+f로 따라갈 수 있음

ㅋㅋㅋㅋ왜 아련하지
키 input event
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
transform.position += Vector3.forward * moveSpeed;
}
}
GameView 클릭하고 해당 키를 누르면 캐릭터가 해당 방향으로 움직임


방향 추가 및 GetKey로 수정(연속적인 움직임을 위해)
void Update()
{
if (Input.GetKey(KeyCode.W))
{
transform.position += Vector3.forward * moveSpeed;
}
else if (Input.GetKey(KeyCode.S))
{
transform.position += Vector3.back * moveSpeed;
}
else if (Input.GetKey(KeyCode.A))
{
transform.position += Vector3.left * moveSpeed;
}
else if (Input.GetKey(KeyCode.D))
{
transform.position += Vector3.right * moveSpeed;
}
}
다양한 이동 방법이 있는데 대부분 러프Lerp를 사용함
간단히 말하면 부드럽게 표현하는 방식임
'공부 > [TIL] Game Bootcamp' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL] 유니티 게임 개발 3기 : Flappy Bird 만들기 (2) | 2024.11.29 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL] 유니티 게임 개발 3기 : Animation, Light, UI - Text 등 (0) | 2024.11.28 |
[멋쟁이사자처럼 부트캠프 TIL] 유니티 게임 개발 3기 : Animator, Rigidbody 등 (1) | 2024.11.27 |
[멋쟁이사자처럼 부트캠프 TIL] 유니티 게임 개발 3기 : 유니티 살펴보기 완 + 유니티 C# + 클래스, 함수, 변수까지 (1) | 2024.11.21 |
[멋쟁이사자처럼 부트캠프 TIL] 유니티 게임 개발 3기 : C# 기초 + Unity 기초 세팅 (1) | 2024.11.20 |