diff --git "a/Day5/5-2.\355\224\204\353\246\254\355\214\271\352\260\234\353\205\220\352\263\274\355\231\234\354\232\251.md" "b/Day5/5-2.\355\224\204\353\246\254\355\214\271\352\260\234\353\205\220\352\263\274\355\231\234\354\232\251.md"
index 6b678dc..eadb625 100644
--- "a/Day5/5-2.\355\224\204\353\246\254\355\214\271\352\260\234\353\205\220\352\263\274\355\231\234\354\232\251.md"
+++ "b/Day5/5-2.\355\224\204\353\246\254\355\214\271\352\260\234\353\205\220\352\263\274\355\231\234\354\232\251.md"
@@ -31,7 +31,7 @@
- 프리팹을 씬으로 다시 끌어오면 **인스턴스(Instance)** 생성됨
- 여러 개의 인스턴스를 만들어도 원본 프리팹과 연결 유지됨
-- 코드로 인스턴스화하기 1
+- 코드로 인스턴스화하기 1(런타임 프리팹 인스턴스화)
```csharp
using UnityEngine;
public class InstantiationExample : MonoBehaviour
@@ -47,8 +47,6 @@ public class InstantiationExample : MonoBehaviour
}
}
```
-- 코드로 인스턴스화하기 2: List 사용(설명 필요)
-🔩 List_Prefab 씬
### ③ 수정하기
diff --git "a/Day5/5-4.Light\352\265\254\354\204\261\354\235\264\355\225\264(Point,Spot).md" "b/Day5/5-4.Light\352\265\254\354\204\261\354\235\264\355\225\264(Point,Spot).md"
index 6a0ac15..6b0f744 100644
--- "a/Day5/5-4.Light\352\265\254\354\204\261\354\235\264\355\225\264(Point,Spot).md"
+++ "b/Day5/5-4.Light\352\265\254\354\204\261\354\235\264\355\225\264(Point,Spot).md"
@@ -64,6 +64,13 @@ Unity에는 여러 조명 타입이 있으며, 대표적으로 아래 세 가지
2. 다양한 오브젝트에 그림자 옵션 추가 (Mesh Renderer > Cast/Receive Shadows)
3. Light > Realtime / Baked / Mixed 설정 실험
+### 🎮 baked light 설정법
+1. light의 모드를 baked로 변경
+2. 빛을 받을 오브젝트를 contibute illumination로 설정
+3. light 창의 generate light 클릭
+
+오브젝트나 빛을 움직이면 다시 generate 해야 함
+
### 🌃 장면 구성 예시
- 어두운 방 안 → 천장에 Point Light
diff --git "a/Day5/5-5.Material\354\240\234\354\236\221\354\213\244\354\212\265(PBR\352\270\260\353\260\230).md" "b/Day5/5-5.Material\354\240\234\354\236\221\354\213\244\354\212\265(PBR\352\270\260\353\260\230).md"
index ee8839b..ebf7afd 100644
--- "a/Day5/5-5.Material\354\240\234\354\236\221\354\213\244\354\212\265(PBR\352\270\260\353\260\230).md"
+++ "b/Day5/5-5.Material\354\240\234\354\236\221\354\213\244\354\212\265(PBR\352\270\260\353\260\230).md"
@@ -52,22 +52,32 @@
---
## 3. 🧪 텍스처 적용 실습
-**🔩 PBR 씬. 텍스쳐 없이, 텍스쳐 있이**
+**🔩 LightTest씬. PBR 씬. 텍스쳐 없이, 텍스쳐 있이**
1. [cc0textures.com](https://ambientcg.com/) 또는 [polyhaven.com](https://polyhaven.com/)에서 PBR 텍스처 세트 다운로드
2. Unity로 임포트 후, 각각 슬롯에 드래그하여 적용:
- Albedo → Base Map
- - Normal → Normal Map (압축 해제 후 Fix 버튼 클릭)
- - Metallic / Roughness → Mask Map 또는 별도 연결
+ - Normal → Normal Map (Texture Type을 Normal map으로 변경)
+ - dx용 normal map일 경우, opengl용으로 값을 뒤집어주는 과정이 필요
+ - dx용 normal map은 움푹 들어간 느낌임.
+ - [  ]( https://europe1.discourse-cdn.com/unity/optimized/4X/b/8/3/b83fc6ae3eb5a4022e82c545a268be5d4689bf71_2_1035x517.jpeg )
+ - Height -> Height Map, Ao -> OCClusion Map
+ - Metallic / Roughness → Unity는 Metalic과, Roughness를 뒤집은 Smoothness가 합쳐져있는걸 쓰기 때문에, 먼저 합쳐주는 과정 필요
3. Metallic/Smoothness 값 조절하며 결과 확인
+💡 Normal map을 뒤집고, metallc과 roughness를 합치는 데 유용한 프로그램
+- https://github.com/Fidifis/TextureMerge/releases
+- zip 압축 풀어서 사용
+
+💡 Texture 임포트 시 `sRGB` 체크 해제 필요 (Metallic 등)
+
---
## 4. 🧱 씬에 적용
- 3D 오브젝트(Plane, Cube, Wall 등)에 머티리얼 드래그
- 조명 변경 후 반사/음영 변화 확인
-- 카메라 위치 및 포스트 프로세싱으로 최종 효과 연출
+- 카메라 위치로 최종 효과 연출
---
@@ -81,9 +91,6 @@
---
## 💡 팁
-
-- Texture 임포트 시 `sRGB` 체크 해제 필요 (Metallic 등)
-- Roughness → Smoothness 변환 필요할 수 있음 (Photoshop 또는 Unity MaskMap 사용)
- URP 사용 시 Shader Graph로 커스텀 셰이더도 가능
---
diff --git "a/Day5/5-7.\354\213\244\354\212\265_3DPlayground\354\224\254\352\265\254\354\204\261.md" "b/Day5/5-7.\354\213\244\354\212\265_3DPlayground\354\224\254\352\265\254\354\204\261.md"
index a1f67ba..ff1458f 100644
--- "a/Day5/5-7.\354\213\244\354\212\265_3DPlayground\354\224\254\352\265\254\354\204\261.md"
+++ "b/Day5/5-7.\354\213\244\354\212\265_3DPlayground\354\224\254\352\265\254\354\204\261.md"
@@ -34,7 +34,6 @@
- 반복적으로 사용할 오브젝트들을 **Prefab**으로 저장
- 예시:
- `Obstacle01` (큐브 + 머티리얼)
- - `PickUpItem` (회전하는 구체)
👉 `Assets/Prefabs/` 폴더에 정리
diff --git "a/Day5/5-8.FPSController\354\241\260\354\236\221\354\213\244\354\212\265.md" "b/Day5/5-8.FPSController\354\241\260\354\236\221\354\213\244\354\212\265.md"
index b42c5b7..6f781ba 100644
--- "a/Day5/5-8.FPSController\354\241\260\354\236\221\354\213\244\354\212\265.md"
+++ "b/Day5/5-8.FPSController\354\241\260\354\236\221\354\213\244\354\212\265.md"
@@ -153,6 +153,7 @@ public class FPSController : MonoBehaviour
- 3D 플레이그라운드 유니티 화면(씬뷰+게임뷰+pbr material 하나 인스펙터) 스크린샷 1장만
- velog 글 링크 하나
+- 플레이 데모 영상 하나
## 💡 팁
diff --git a/Day6/6-1.RigidbodyvsCharacterController.md b/Day6/6-1.RigidbodyvsCharacterController.md
index dbf55e0..fde7f41 100644
--- a/Day6/6-1.RigidbodyvsCharacterController.md
+++ b/Day6/6-1.RigidbodyvsCharacterController.md
@@ -5,14 +5,14 @@
---
## 🧠 학습 목표
-
+dd
- Rigidbody와 Character Controller의 차이를 명확히 이해한다.
- 각각의 장단점과 사용 시나리오를 비교한다.
- 실제 프로젝트에서 어떤 컨트롤러를 사용할지 판단할 수 있다.
---
-🔩예시 씬: rigidbody, characterController 값들, 함수설명
+🔩예시 씬: rigidbody, characterController 값들, 함수설명. playerController.cs로
## 1. Rigidbody란?
@@ -23,7 +23,12 @@
### ✅ 특징
- 실제 물리 법칙을 시뮬레이션함
- 외부 힘(Force, Torque) 적용 가능
-- 이동/회전은 `AddForce()` 등으로 수행(함수설명)
+- 이동/회전은 `AddForce()`, `MovePosition()`, `velocity` 등으로 수행(함수설명)
+
+### 예시코드
+```chsarp
+rb.MovePosition(rb.position + move * moveSpeed * Time.deltaTime);
+```
---
@@ -75,7 +80,6 @@
## 5. 사용 팁
- 두 컴포넌트를 동시에 사용하면 충돌 문제가 발생하므로 **둘 중 하나만 사용**!
-- Rigidbody를 사용할 경우 **이동은 Force로**, Character Controller는 **Move() 함수 사용**
- 캐릭터의 발 아래에 `Ground Check` 로직 추가 시 안정성 향상
---
diff --git "a/Day6/6-2.Trigger&Collider\355\231\234\354\232\251.md" "b/Day6/6-2.Trigger&Collider\355\231\234\354\232\251.md"
index d6f4eae..51585e7 100644
--- "a/Day6/6-2.Trigger&Collider\355\231\234\354\232\251.md"
+++ "b/Day6/6-2.Trigger&Collider\355\231\234\354\232\251.md"
@@ -19,9 +19,33 @@
- `Is Trigger` 체크 해제 시, **충돌 처리** 전용
```csharp
-void OnCollisionEnter(Collision collision) {
+// 충돌 시 한번만: 충돌체 둘 중 하나에 rigidbody 있어야 함
+void OnCollisionEnter(Collision collision)
+{
Debug.Log("충돌 발생: " + collision.gameObject.name);
}
+
+// 충돌 할 때마다: 충돌체 둘 중 하나에 rigidbody 있어야 함
+private void OnCollisionStay(Collision collision)
+{
+
+}
+
+// 충돌 할 때마다: 충돌체 둘 중 하나에 CharacterController 있어야 함
+void OnControllerColliderHit(ControllerColliderHit hit)
+{
+ Debug.Log("충돌 발생: " + hit.gameObject.name);
+}
+
+void OnCollisionStay(Collision collision)
+{
+ if(collision.gameObject.tag == "Player")
+ {
+ Debug.Log("충돌");
+ rb.AddForce(force * collision.transform.forward);
+ }
+}
+
```
---
@@ -33,7 +57,9 @@ void OnCollisionEnter(Collision collision) {
- 물리적 충돌 없이 겹쳐지는 순간을 감지
```csharp
-void OnTriggerEnter(Collider other) {
+// 트리거에 들어왔을 때
+void OnTriggerEnter(Collider other)
+{
Debug.Log("트리거 진입: " + other.name);
}
```
diff --git "a/Day6/6-3.Cinemachine\354\271\264\353\251\224\353\235\274\354\213\234\354\212\244\355\205\234.md" "b/Day6/6-3.Cinemachine\354\271\264\353\251\224\353\235\274\354\213\234\354\212\244\355\205\234.md"
index 679d17f..05d7aae 100644
--- "a/Day6/6-3.Cinemachine\354\271\264\353\251\224\353\235\274\354\213\234\354\212\244\355\205\234.md"
+++ "b/Day6/6-3.Cinemachine\354\271\264\353\251\224\353\235\274\354\213\234\354\212\244\355\205\234.md"
@@ -11,7 +11,7 @@
- 다양한 Virtual Camera와 Blend 설정으로 장면 전환 효과를 연출한다.
---
-🔩예시 씬
+🔩예시 씬. CM_Scene
## 1. Cinemachine이란?
@@ -49,6 +49,8 @@
## 4. 실습 예시: 플레이어 추적 카메라
+5일차에 만든 fps controller 활용
+
1. Main Camera에 Cinemachine Brain 추가
2. Hierarchy > Cinemachine > Create Virtual Camera
3. Virtual Camera 선택 후:
diff --git "a/Day6/6-6.\354\213\244\354\212\265_3D\353\257\270\354\205\2302\354\242\205\354\240\234\354\236\221(\354\240\220\355\224\204,\354\210\230\354\247\221).md" "b/Day6/6-6.\354\213\244\354\212\265_3D\353\257\270\354\205\2302\354\242\205\354\240\234\354\236\221(\354\240\220\355\224\204,\354\210\230\354\247\221).md"
index 1c78f09..b744bd5 100644
--- "a/Day6/6-6.\354\213\244\354\212\265_3D\353\257\270\354\205\2302\354\242\205\354\240\234\354\236\221(\354\240\220\355\224\204,\354\210\230\354\247\221).md"
+++ "b/Day6/6-6.\354\213\244\354\212\265_3D\353\257\270\354\205\2302\354\242\205\354\240\234\354\236\221(\354\240\220\355\224\204,\354\210\230\354\247\221).md"
@@ -22,18 +22,187 @@
- 땅에 닿아 있을 때만 점프 가능
- 점프 쿨타임 또는 중복 점프 방지
-### 🛠️ 주요 구성 요소
-- `Cinemachine`으로 시점 구현.
-- `Rigidbody` 사용 시 점프: `AddForce` 또는 `velocity` 제어
-- `CharacterController` 사용 시 점프: 점프 직접 구현 필요
+### 🛠️ 주요 구성 요소 1: 3인칭 시점
+
+- `Cinemachine`의 `FreeLockCamera`로 3인칭 시점 구현.(샘플로 만든 씬 보여줘서 어떻게 3인칭 시점이 작동하면 되는가 보여주기+캐릭터 게임오브젝트 구성요소)
+```csharp
+private float rotationVelocity;
+
+private void Rotate()
+{
+ // FreeLockCamera
+ // Follow, Look at을 Player로
+ // top, middle, bottom rig의 Body > X/Y/Z Damping을 전부 0으로.(카메라가 늦게 따라가는거 방지)
+ // 필요에 따라, Y, X axis invert
+ // 필요에 따라, Orbit rig 설정
+
+ // 대상이 될 카메라의 y축 각도
+ float targetRotation = Camera.main.transform.eulerAngles.y;
+ // 현재 캐릭터의 y축 각도를 대상 각도(targetRotation)를 향해 mouseSensitivity 속도로 회전시켜준다.
+ float rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref rotationVelocity, 1/mouseSensitivity);
+ // 구해진 rotation을 Quaternion.Euler에 y축 각도로 넣어주고 transform.rotation에 적용
+ transform.rotation = Quaternion.Euler(0, rotation, 0);
+}
+```
+- `Rigidbody` 사용 시 이동:
+```csharp
+// 키보드 이동
+Vector3 move = transform.right * moveX + transform.forward * moveZ;
+
+rb.MovePosition(rb.position + move * moveSpeed * Time.fixedDeltaTime);
+```
+
+
+3인칭 시점 구현 답 확인
+
+```csharp
+//FixedUpdate 내부의 3인칭 시점 구현 답
+// 키보드 이동
+Vector3 move = transform.right * moveX + transform.forward * moveZ;
+
+rb.MovePosition(rb.position + move * moveSpeed * Time.fixedDeltaTime);
+
+if (move != Vector3.zero)
+{
+ Rotate();
+ Quaternion moveRotation = Quaternion.LookRotation(move);
+ childObj.transform.rotation = moveRotation;
+}
+```
+
+
+
+
+3인칭 시점 구현 답(최종 전체 코드)
+
+```csharp
+using Cinemachine;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PalyerControllerThirdAns : MonoBehaviour
+{
+ public float moveSpeed = 5f;
+ public float mouseSensitivity = 100f;
+ public GroundChecker groundChecker; // 아래 GroundChecker.cs 코드도 있음.
+ public float jumpForce;
+
+ public CinemachineFreeLook freeLockCamera;
+
+ public GameObject childObj;
+
+ private Rigidbody rb;
+
+ private float rotationVelocity;
+
+ private float moveX;
+ private float moveZ;
+
+ void Start()
+ {
+ rb = GetComponent();
+ Cursor.lockState = CursorLockMode.Locked;
+ }
+
+ void Update()
+ {
+ moveX = Input.GetAxis("Horizontal");
+ moveZ = Input.GetAxis("Vertical");
+ if (groundChecker.IsGrounded() && Input.GetButtonDown("Jump"))
+ {
+ //Debug.Log("그라운드 점프");
+ rb.AddForce(Vector3.up * jumpForce, ForceMode.VelocityChange);
+ }
+ }
+
+ void FixedUpdate()
+ {
+ Vector3 move = transform.right * moveX + transform.forward * moveZ;
+ //rb.velocity = move * moveSpeed + Vector3.up * rb.velocity.y;
+ //rb.AddForce(move * moveSpeed); // 마찰력으로 인해 이동 안됨
+
+ rb.MovePosition(rb.position + move * moveSpeed * Time.fixedDeltaTime);
+
+ if (move != Vector3.zero)
+ {
+ Rotate();
+ Quaternion moveRotation = Quaternion.LookRotation(move);
+ childObj.transform.rotation = moveRotation;
+ }
+ }
+
+ private void Rotate()
+ {
+ // 대상이 될 카메라의 y축 각도
+ float targetRotation = Camera.main.transform.eulerAngles.y;
+ // 현재 캐릭터의 y축 각도를 대상 각도(targetRotation)를 향해 mouseSensitivity 속도로 회전시켜준다.
+ float rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref rotationVelocity, 1 / mouseSensitivity);
+ // 구해진 rotation을 Quaternion.Euler에 y축 각도로 넣어주고 transform.rotation에 적용
+ transform.rotation = Quaternion.Euler(0, rotation, 0);
+ }
+}
+```
+
+
+
+### 🛠️ 주요 구성 요소 2: 점프
+- `Rigidbody` 사용 시 점프: `AddForce. 모드는 ForceMode.VelocityChange` 또는 `velocity` 제어
+ - rigidbody에서 rotation freeze 필요
+- `CharacterController` 사용 시 점프: 물리 직접 구현 필요
+- 지면에 있을 때만 점프가 가능하게 해야 함.
+- 점프 키 입력 감지 함수 공통: `Input.GetButtonDown("Jump")`
- 점프 후 사운드 재생, 이펙트 연동도 확장 가능
+### 💡 주의할 점
+- `FixedUpdate`에서 이동과 카메라 이동을 구현 해야 카메라 떨림 발생안함.
+- `Update`에서 점프를 구현해야 함. 그렇지 않으면, 점프 키 씹힘 문제 발생 가능.
+
### 💡 지면 판정 팁
`isGrounded` 플래그 처리. 아래는 그 방법들
-- `OnCollisionEnter`
-- `Physics.Raycast`
-- `Physics.Boxcast`
+- `OnCollisionEnter`: 가장 간단함. but, 플레이어의 옆과 부딪혀도 지면판정함.
+- `Physics.Raycast` : 위의 문제 없음. but, 급낙하 문제
+[  ]( https://velog.velcdn.com/images/nagi0101/post/d2bb6519-dc90-4a91-9b1c-d8fc8d6b646c/image.png )
+
+- `Physics.Boxcast` : 위 2개 문제 해결. GroundChecker.cs 예시
+```csharp
+using UnityEngine;
+
+public class GroundChecker : MonoBehaviour
+{
+ [Header("Boxcast Property")]
+ [SerializeField] private Vector3 boxSize;
+ [SerializeField] private float maxDistance;
+ [SerializeField] private LayerMask groundLayer;
+
+ [Header("Debug")]
+ [SerializeField] private bool drawGizmo;
+
+ private void OnDrawGizmos()
+ {
+ if (!drawGizmo) return;
+
+ Gizmos.color = Color.cyan;
+ Gizmos.DrawCube(transform.position - transform.up * maxDistance, boxSize);
+ }
+
+ public bool IsGrounded()
+ {
+ /* BoxCast 매개변수들
+ 1. Box Ray를 발사할 시작점
+ 2. Box 크기의 절반
+ 3. Box Ray를 발사할 방향
+ 4. Box의 회전값
+ 5. Box Ray가 갈 수 있는 최대 거리
+ 6. Box Ray와 충돌 판정이 가능한 Layer들
+ */
+ return Physics.BoxCast(transform.position, boxSize / 2.0f, -transform.up, transform.rotation, maxDistance, groundLayer);
+ }
+
+}
+```
+🎯 `BoxCast` 설명글: http://theeye.pe.kr/archives/2764
🎯 `CharacterController`는 특히, 중력 직접 구현 시, `isGrounded`일 경우, 중력값 누적을 멈춰야 함. 급낙하 방지 위함.
@@ -57,14 +226,16 @@
## 3. 확장 아이디어
+- 아이템 수집 시, 소리 출력
- 제한 시간 내 아이템 수집 게임
+- 캐릭터 모델 및 캐릭터 애니메이션 삽입
- 특정 개수 이상 수집 시 다음 스테이지 전환
- 점프 미션과 수집 미션을 혼합한 퍼즐 구성
---
## ✅ 완료 체크리스트
-
+- [ ] 3인칭 시점 기능 정상 작동
- [ ] 캐릭터 점프 기능 정상 작동
- [ ] 중복 점프 방지 로직 포함
- [ ] 아이템 충돌 → 사라짐 구현
@@ -72,12 +243,14 @@
- [ ] 플레이어 Prefab 정리 완료
## ✅ 산출물
-- 점프액션+아이템 수집 게임 유니티 화면(씬+게임뷰+캐릭터 조작 스크립트 코드 인스펙터 화면)을 캡쳐한 사진 1장만
+- 점프+아이템 수집 3인칭 게임 데모 영상
+- 점프+아이템 수집 3인칭 게임 유니티 화면(씬+게임뷰+캐릭터 조작 스크립트 코드 인스펙터 화면)을 캡쳐한 사진 1장만
- 간단한 게임설명이 같이 들어간 velog글 링크 하나.
---
## 🔗 참고 자료
+- 무료 효과음 사이트: https://soundeffect-lab.info/sound/button/
- [Unity Manual - Rigidbody](https://docs.unity3d.com/Manual/class-Rigidbody.html)
- [Unity Docs - OnTriggerEnter](https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html)
diff --git "a/Day7/7-1.\354\204\261\353\212\245\353\266\204\354\204\235\352\260\234\353\205\220(Profiler).md" "b/Day7/7-1.\354\204\261\353\212\245\353\266\204\354\204\235\352\260\234\353\205\220(Profiler).md"
index 97b46f3..7ce5f02 100644
--- "a/Day7/7-1.\354\204\261\353\212\245\353\266\204\354\204\235\352\260\234\353\205\220(Profiler).md"
+++ "b/Day7/7-1.\354\204\261\353\212\245\353\266\204\354\204\235\352\260\234\353\205\220(Profiler).md"
@@ -1,3 +1,4 @@
+# 이거 말고 Animator ㄱ?
# 🔍 성능 분석 개념 (Profiler)
> Unity Profiler를 통해 게임의 성능 병목을 분석하고, 최적화를 위한 기초적인 분석 방법을 익힙니다.
@@ -84,6 +85,11 @@ Unity Profiler는 게임 실행 중 다양한 성능 데이터를 시각적으
---
+## 💡 AI 사용 시 주의점
+ai가 주는 코드 한줄한줄 무슨 코드인지 이해하고, 잘못된 코드인지 아닌지 확인하고 써야한다. ai 코드 그냥 무조건 맞겠지 하고 계속 갖다붙이면 나중에 코드 규모 커질 때 언젠가 뻑이 가고, 그때 고칠려하면 굉장히 힘듬.
+
+---
+
## 💡 GitKraken
- GUI로 간편하게 Git 작업을 할 수 있는 프로그램
- Git 히스토리를 한 눈에 편하게 볼 수 있음.
@@ -100,8 +106,8 @@ Unity Profiler는 게임 실행 중 다양한 성능 데이터를 시각적으
---
## 📦 산출물
+- 최종 게임 데모 영상
- 만든 최종 게임 유니티 화면(씬+게임뷰) 스크린샷 하나
-- profiler성능분석 ai 답변 스크린샷 하나
- 게임설명 velog 링크 하나
---
diff --git "a/Day7/7-9. \354\225\240\353\213\210\353\251\224\354\235\264\354\205\230 \354\240\201\354\232\251\355\225\230\352\270\260.md" "b/Day7/7-9. \354\225\240\353\213\210\353\251\224\354\235\264\354\205\230 \354\240\201\354\232\251\355\225\230\352\270\260.md"
new file mode 100644
index 0000000..d81e28f
--- /dev/null
+++ "b/Day7/7-9. \354\225\240\353\213\210\353\251\224\354\235\264\354\205\230 \354\240\201\354\232\251\355\225\230\352\270\260.md"
@@ -0,0 +1,76 @@
+# 🔍 애니메이션 적용하기
+
+> mixamo를 사용해 어제 만든 3인칭 게임에 모델과 애니메이션을 적용해봅시다.
+
+---
+
+## 🎯 학습 목표
+
+- Animator, Animation Controller로 애니메이션 적용하기
+- 코드로 애니메이션 상태 전환하기
+
+---
+
+## 1. Animator란?
+
+모델에 애니메이션을 적용하기 위한 컴포넌트
+
+Animator Controller와 같이 써야함
+
+---
+
+## 2. 사용 방법
+
+### 2-1. 애니메이션 파일 추출하기(일단은 idle)
+1. mixamo.com 에 접속
+2. 로그인
+3. Characters 클릭
+4. 가져오고 싶은 모델 선택
+5. Animations 클릭
+6. 가져오고 싶은 애니메이션들 검색하기(ex: idle, walk, jump)
+7. In place 체크박스가 있는 경우 체크
+8. DOWNLOAD 클릭
+9. Format을 fbx for Unity로 변경.
+10. DOWNLOAD 클릭
+10. 다운로드한 fbx파일을 유니티의 프로젝트 뷰로 옮기기
+11. 프로젝트 뷰에서 다운로드한 파일 클릭
+12. Animation 탭 클릭
+13. 쭉 아래로 내려서 Loop Time 체크
+14. Apply 버튼 클릭 후 완료될 때 까지 대기
+15. 다운로드한 파일 좌측 삼각형 클릭해서 세부 파일들 보기
+16. 세모 모양 세부 파일 클릭
+17. 컨트롤 + D를 눌러 그 세모 모양 세부 파일 복사
+
+### 2-2. 애니메이션 적용하기(일단은 idle)
+1. 다운로드한 파일을 Hierarchy의 적용하고 싶은 곳에 넣기(새로운 모델 오브젝트가 생성됨)
+2. 텍스쳐가 적용이 안된 경우, 그 fbx 파일 클릭 후 animation탭으로 이동 후, extract texture, extract material 클릭해서 적용
+3. 새로운 모델 오브젝트 클릭 후, Add Component로 Animator 가져오기
+4. 프로젝트 뷰에 마우스 우클릭 후, Create > Animator Controller 클릭해서, Animator Controller 생성하기
+5. 생성한 Animator Controller를 Animator 컴포넌트의 Controller 부분에 드래그 앤 드롭.
+6. Animator Controller 더블 클릭하면, Animator 탭이 새로 열림
+7. 추출한 애니메이션 파일을 Animator 탭에 가져다 놓기(애니메이션 상태가 하나 생성됨)
+8. Entry 마우스 우클릭 > Make Transition 클릭.
+9. 생성된 화살표를 가져다놓은 애니메이션 상태에 커서 올린 다음, 클릭
+10. 게임 실행 눌러서 애니메이션 실행되는지 확인
+
+### 2-3. 애니메이션 간 상태 변환 하기(idle, walk, jump 연결을 예시로)
+1. 1-2, 2-2의 1~7과정을 추가로 적용하고 싶은 애니메이션들에 대해서도 진행.
+2. 각 애니메이션 상태 별 transition(화살표) 연결하기(2-2의 8번 과정 참고. 화살표 출발점에서 화살표 끝점으로 애니메이션 상태가 변환되는거임)
+3. Animation 탭의 Parameter 부분에 사용할 전환 조건들을 추가. walk, jump를 예시로 들면, 아래 2개 조건 추가
+ - isWalking(bool형)
+ - jumpTrigger(Trigger형): Trigger형은 상태전환이 완료되고 바로 false로 바뀌는 bool형이라고 생각하면 됨.
+4. transition(화살표)별 전환 방법 설정하기: 화살표 클릭 후, 아래 설정들 하기
+ - Has Exit Time: 전환 조건이 만족되더라도, 이 애니메이션 실행이 모두 완료되고 나서 전환하겠다.
+ - Setting > Transition Duration: 한 애니메이션에서 다른 애니메이션으로 전환하는 딜레이(길게할수록 한 애니메이션에서 다른 애니메이션으로 끊기지 않고 자연스럽게 연결됨)
+ - Conditions: 3의 Parameter로 추가한 조건들을 실제로 애니메이션 상태전환 조건으로 설정하는 부분.
+4. 코드에서 적절히 Condition들을 변환해주기:
+ - animator.SetTrigger("jumpTrigger");
+ - animator.SetBool("isWalking", true);
+ - animator.SetBool("isWalking", false);
+5. 잘 되는지 테스트
+
+---
+
+## 🔗 참고 자료
+
+- [Unity Animation 튜토리얼. 자동번역 켜기](https://youtube.com/playlist?list=PLwyUzJb_FNeTQwyGujWRLqnfKpV-cj-eO&si=hkfuZ6CT_IO6E_2w)
diff --git "a/Day8/8-1.\355\217\254\355\212\270\355\217\264\353\246\254\354\230\244\352\265\254\354\241\260\354\204\244\352\263\204.md" "b/Day8/8-1.\355\217\254\355\212\270\355\217\264\353\246\254\354\230\244\352\265\254\354\241\260\354\204\244\352\263\204.md"
index 5efee1b..ed51b4b 100644
--- "a/Day8/8-1.\355\217\254\355\212\270\355\217\264\353\246\254\354\230\244\352\265\254\354\241\260\354\204\244\352\263\204.md"
+++ "b/Day8/8-1.\355\217\254\355\212\270\355\217\264\353\246\254\354\230\244\352\265\254\354\241\260\354\204\244\352\263\204.md"
@@ -32,6 +32,9 @@
| 역할 분담 | 기획/프로그래밍/아트 등 |
| 회고 | 문제 해결 경험 및 배운 점 |
+### 💡주의할 점
+노션 링크 공유 시, `링크가 있는 모든 사용자`가 접근 가능한 설정으로 공유 해야 함.
+
---
## 2. GitHub 구조 예시
@@ -41,7 +44,6 @@ unity-portfolio/
├── README.md
├── Builds/
│ └── MacOS_Build.app/
-├── Assets/
├── Docs/
│ └── Screenshots/
├── Devlog/
@@ -55,17 +57,9 @@ unity-portfolio/
---
-## 3. Velog / Blog 작성 예시
-
-- `[Unity Devlog] 점프 로직 최적화 후기`
-- `[DemoDay 회고] 발표를 마치고 느낀 점`
-- `[협업] GitHub Project Board 실전 활용기`
-
----
-
## 4. 체크리스트
-- [ ] GitHub Or Notion / Blog 2곳 동시 정리
+- [ ] GitHub Or Notion 정리
- [ ] 썸네일 이미지 및 영상 첨부
- [ ] README 구조화 (섹션별 정리)
- [ ] 코드 일부 첨부 및 주요 기능 스크린샷
@@ -82,9 +76,10 @@ unity-portfolio/
## 📦 산출물
- 만든 최종 게임 유니티 화면(씬+게임뷰) 스크린샷 하나
- 짧은 시연 영상 하나
-- 포트폴리오 Notion or Github 주소 제출(Devlog 주소 1개 이상)
+- 포트폴리오 Notion or Github 주소 제출
- 발표할 사람만: 최종 발표용 PDF or Google Slides
+#### 💡 노션 링크 공유 시, `링크가 있는 모든 사용자`가 접근 가능한 설정으로 공유 해야 함.
---
## 💡 팁
diff --git "a/PPTs/\354\234\240\353\213\210\355\213\260_2\354\243\274\354\260\250_\352\260\225\354\235\230.pptx" "b/PPTs/\354\234\240\353\213\210\355\213\260_2\354\243\274\354\260\250_\352\260\225\354\235\230.pptx"
index 8555712..94f497b 100644
Binary files "a/PPTs/\354\234\240\353\213\210\355\213\260_2\354\243\274\354\260\250_\352\260\225\354\235\230.pptx" and "b/PPTs/\354\234\240\353\213\210\355\213\260_2\354\243\274\354\260\250_\352\260\225\354\235\230.pptx" differ