티스토리 뷰
드디어 유니티를 들어갔다 유니티에 들어가니 정말 강의에 계속 집중을 해야 따라갈 수 있다.. 그리고 유니티허브 + 비주얼스튜디오 + 검색, 디스코드용 웹 이렇게 키다보니 듀얼모니터로도 부족해서 앞으로 강의는 패드로 켜놓으려고 한다
그리고 켜야하는 창이 많아지다 보니 윈도우를 쓰는게 너무 불편하다 ㅜㅜ 맥북으로 갈아타야지..
💻 Unity
Unity 좌표계

X축 | 왼쪽(-) ↔ 오른쪽(+) | 빨강 |
Y축 | 아래(-) ↔ 위(+) | 초록 |
Z축 | 뒤(-) ↔ 앞(+) | 파랑 |
월드 축, 로컬 축
월드 축 (World Space) | Unity 전체 공간에서의 절대적인 축 방향 |
로컬 축 (Local Space) | 특정 개체의 기준으로 한 상대적인 축 방향 |
📌 예제
- transform.position → 월드 좌표 기준 위치
- transform.localPosition → 부모 개체(Local Space) 기준 위치
- transform.forward → 개체의 Z축 방향(로컬 축 기준)
- transform.up → 개체의 Y축 방향(로컬 축 기준)
- transform.right → 개체의 X축 방향(로컬 축 기준)
Object
게임 내에서 존재하는 모든 것을 의미
📌 예시
- GameObject (게임 오브젝트)
- Transform (위치, 회전, 크기 정보)
- MeshRenderer (3D 모델을 표시)
- Rigidbody (물리 적용)
- Collider (충돌 감지)
- AudioSource (소리 재생)
- Camera, Light, Player 등
📌 특징
- 게임에 배치할 수 있는 요소
- Hierarchy 창에서 확인 가능
- GameObject는 여러 컴포넌트(Component) 를 가질 수 있음
- 기본적으로 Transform 컴포넌트를 포함함
Script
Object를 제어하는 코드 파일. 게임 오브젝트의 동작을 프로그래밍 할 수 있다
📌 특징
- .cs 파일 (C# 언어 사용)
- MonoBehaviour를 상속받음
- GameObject에 추가해야 동작함
- Start(), Update() 같은 기본 함수 포함
📌 스크립트의 역할
- 캐릭터 이동, 점프 등 제어
- 충돌 감지 및 이벤트 처리
- UI 업데이트
- 오브젝트 생성 및 삭제
Object와 Script의 관계
Script는 Object에 컴포넌트(Component) 형태로 추가돼야 실행할 수 있음
Object | 게임 내에서 존재하는 물리적 요소 (캐릭터, 배경, 적 등) |
Script | Object의 동작을 정의하는 코드 (이동, 애니메이션, 이벤트 등) |

Vector
public Vector2 v2 = new Vector2(5.0f, 5.0f);
public Vector3 v3 = new Vector3(5.0f, 5.0f, 7.0f);
public Vector4 v4 = new Vector4(1.0f, 0.5f, 0.0f, 1.0f); // 좌표보다 색상에 많이 씀 (RGBA)
Unit Vector 단위 벡터
- Vector3.zero: (0, 0, 0) 벡터
- Vector3.up: (0, 1, 0) 벡터, 위쪽 방향
- Vector3.down: (0, -1, 0) 벡터, 아래쪽 방향
- Vector3.left: (-1, 0, 0) 벡터, 왼쪽 방향
- Vector3.right: (1, 0, 0) 벡터, 오른쪽 방향
- Vector3.forward: (0, 0, 1) 벡터, 앞쪽 방향
- Vector3.back: (0, 0, -1) 벡터, 뒤쪽 방향
Vector 연산
덧셈
Vector3 vector1 = new Vector3(1, 2, 3);
Vector3 vector2 = new Vector3(4, 5, 6);
Vector3 result = vector1 + vector2; // (5, 7, 9)
뺄셈
Vector3 vector1 = new Vector3(5, 7, 9);
Vector3 vector2 = new Vector3(1, 2, 3);
Vector3 result = vector1 - vector2; // (4, 5, 6)
A-B는 A를 바라보고 B-A는 B를 바라보는 방향으로 나온다

스칼라 곱
Vector3 vector = new Vector3(1, 2, 3);
float scalar = 2.0f;
Vector3 result = vector * scalar; // (2, 4, 6)
벡터에 스칼라(상수 값)를 곱하는 연산. 벡터의 크기는 스칼라 값만큼 확장되거나 축소된다.
벡터 크기
벡터가 나타내는 방향의 길이. 크기는 피타고라스 정리를 사용하여 계산된다.
Vector3 vector = new Vector3(3, 4, 0);
float magnitude = vector.magnitude; // 5
벡터 정규화
벡터의 크기를 1로 만드는 과정. 이 과정을 통해 벡터의 방향은 그대로 유지하면서, 크기가 1인 단위 벡터(unit vector)로 변환된.
Vector3 vector = new Vector3(3, 4, 0);
Vector3 normalizedVector = vector.normalized; // normalizedVector는 (0.6, 0.8, 0)이며, 크기는 1
내적
두 벡터의 내적은 두 벡터가 얼마나 동일한 방향으로 향하는지를 나타내는 값. 내적 값이 클수록 두 벡터의 방향이 유사하고, 내적 값이 0이면 두 벡터는 수직이다.
Vector3 vector1 = new Vector3(1, 2, 3);
Vector3 vector2 = new Vector3(4, 5, 6);
float dotProduct = Vector3.Dot(vector1, vector2); // 32
외적
3D 벡터에서만 사용할 수 있는 연산으로, 두 벡터의 외적은 새로운 벡터를 생성한다. 이 벡터는 원래 두 벡터에 수직인 벡터로, 외적을 통해 두 벡터가 이루는 평면에 수직인 벡터를 구할 수 있다.
Vector3 vector1 = new Vector3(1, 2, 3);
Vector3 vector2 = new Vector3(4, 5, 6);
Vector3 crossProduct = Vector3.Cross(vector1, vector2); //(-3, 6, -3)
키 입력받아 움직이기
public float speed = 5.0f;
void Update()
{
//float move = Input.GetAxis("Horizontal");
//transform.Translate(Vector3.right * move * speed * Time.deltaTime);
var move2D = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);
var move3D = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
//transform.position += move3D * speed * Time.deltaTime;
transform.Translate(move3D * speed * Time.deltaTime);
}
Time.deltaTime 는 프레임에 의존하지 않고 부드럽게 움직이게 하기 위해 사용
RigidBody

물리 엔진을 적용할 수 있는 컴포넌트. 중력(gravity), 힘(force), 충돌(collision) 등의 물리적 효과를 적용할 수 있다
public Rigidbody rigidBody;
public float jumpForce = 5.0f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Rigidbody : 물리효과를 추가해 중력을 적용한다
// AddForce : 점프를 위해 오브젝트에 힘을 준다
// ForceMode.Impulse : 순간적으로 힘을 가하는 옵션
rigidBody.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
Collider
충돌 판정을 담당한다. 이 컴포넌트를 추가하면 오브젝트가 다른 오브젝트와 충돌했을 때 감지할 수 있다
🕹️ 게임 실습
DragonFlight
Background
Background용 Quad 오브젝트를 만들고 이 오브젝트에 씌울 넣을 머테리얼을 만든다. 머테리얼에 넣을 이미지를 연결하고, 오브젝트에 머테리얼을 연결한다
- Quad Object 추가
- Material 추가 후 Shader를 Unlit/Texture로 변경 후 이미지 파일 연결
- 이미지 파일 설정
- Main Camera Object에 배경음악 추가
💫 Tip!
.gitignore 파일 수정
# Get latest from <https://github.com/github/gitignore/blob/main/Unity.gitignore>
**/[Ll]ibrary/
**/[Tt]emp/
**/[Oo]bj/
**/[Bb]uild/
**/[Bb]uilds/
**/[Ll]ogs/
**/[Uu]ser[Ss]ettings/
프로젝트용이 아니라 공부용이기 때문에 하위폴더에 유니티 프로젝트가 있어서 이렇게 바꿔주어야 한다
Unity 기본 메서드 불러오기

Ctrl + Shift + M
📝 과제
간단한 게임
https://github.com/yh97yhyh/likelion-unity-study/tree/main/BasicGame
using UnityEngine;
using UnityEngine.SceneManagement;
public class SphereController : MonoBehaviour
{
public Rigidbody rb;
public float moveSpeed = 5f;
public float jumpForce = 5f;
private Vector3 startPosition;
public Transform mainCamera;
private Vector3 cameraStartPosition;
void Start()
{
rb = GetComponent<Rigidbody>();
startPosition = transform.position;
if (mainCamera != null)
{
cameraStartPosition = mainCamera.position;
}
}
void Update()
{
transform.position += Vector3.right * moveSpeed * Time.deltaTime;
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
// print($"Sphere 위치 : {transform.position}");
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Barriar"))
{
RestartGame();
}
}
private void RestartGame()
{
transform.position = startPosition;
rb.angularVelocity = Vector3.zero;
if (mainCamera != null)
{
mainCamera.position = cameraStartPosition;
}
}
}
'Unity > 멋쟁이사자처럼' 카테고리의 다른 글
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 14일차 회고 (0) | 2025.03.12 |
---|---|
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 13일차 회고 (0) | 2025.03.11 |
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 11일차 회고 (0) | 2025.03.07 |
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 10일차 회고 (0) | 2025.03.07 |
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 9일차 회고 (0) | 2025.03.07 |