분류 전체보기 75

30일차 - 3D Practice 1 (이동, 체력)

▶▷ 플레이어 이동이번 프로젝트에서는 플레이어의 움직임을 위한 입력을 InputSystem을 이용하기로 했다.네가지 방식 중 Invoke Unity Events 방식을 이용하여 구현하였고, 이동, 시야, 점프 등이 있다.먼저 사용할 키를 설정한 다음 private void Move() { // 현재 입력의 y 값은 z 축(forward, 앞뒤)에 곱한다. // 현재 입력의 x 값은 x 축(right, 좌우)에 곱한다. Vector3 dir = transform.forward * curMovementInput.y + transform.right * curMovementInput.x; dir *= moveSpeed; // 방향에 속력을 곱해준다...

카테고리 없음 2025.03.06

29일차 - AI Navigation

▶▷ AI Navigation인공지능이 게임이나 시뮬레이션 등 가상 환경에서 캐릭터나 NPC가 지형, 장애물, 목표 지점 등을 고려하여 지능적으로 적절한 경로를 생성하고 이동하는데 사용 Navigation Mesh3D 공간을 그리드로 나누어 이동 가능한 지역과 장애물이 있는 지역을 구분하는 매쉬캐릭터가 이동할 수 있는 영역과 이동할 수 없는 영역을 정의하고 이를 기반으로 경로를 계산2. Pathfinding캐릭터의 현재 위치에서 목표 지점까지 가장 적절한 경로를 찾는 알고리즘 3. Steering Behavior캐릭터나 NPC가 경로를 따라 이동할 때 자연스러운 동작을 구현하기 위해 사용동적으로 캐릭터의 이동 방향과 속력을 조정하여 부드럽고 현실적인 이동을 시뮬레이션함 4. Obstacle Avoidan..

28일차 - ForceMode, Raycast, Coroutine, Light

이번주 부터는 유니티 숙련주차로, 3D 프로젝트를 다룰 것이다. 이번에 만들 프로젝트는 간단한 3D 생존 게임이고 해당 프로젝트를 통해 3D에서 쓰이는 요소들을 파악하고 학습할 예정이다.▶▷ Rigidbody - ForceModeForce : 힘을 지속적으로 적용Rigidbody.AddForce(Vector3 force, ForceMode.Force);Acceleration : 가속도 적용Rigidbody.AddForce(Vector3 force, ForceMode.Acceleration);Impulse : 순간적인 힘 적용Rigidbody.AddForce(Vector3 force, ForceMode.Impulse);VelocityChange : 변화하는 속도를 적용합니다. 물체의 현재 속도를 변경하면서..

27일차 - Delegate, Input System

▶▷ 델리게이트, 이벤트 델리게이트 : 덮어쓰기 가능 (=) (외부에서 Invoke가능)delegate 반환형 델리게이트명(매개변수);delegate void DalegateFunc(); 이벤트 : 덮어쓰기 불가능 (+=, -=) (내부에서만 Invoke 가능)event 델리게이트명 변수이름;Action : 자동 델리게이트 ▶▷ InputSystem다이렉트 방식wasPressedThisFrame: 눌렀을 때wasRealeasedThisFrame: 땠을 때isPressed: 누르고 있을 때 임베디드 방식 C# 제너레이트 방식게임의 규모가 커질 수록 C# 제너레이트 방식이 편하고 간단하고 빠르게 구현할 때는 다이렉트나 임베디드가 편하다고 한다.C# 제너레이트 방식은 각각의 요소에게 다른 조작키를 부여할 때 ..

26일차 - PenguinRun 팀 프로젝트 마무리

▶▷ PenguinRun오늘은 애니메이션 렌더러 추가 작업과 플레이 테스트, 그리고 마무리 작업으로 README를 작성하였다. 더보기# Penguin Run## 📂 프로젝트 구조📦 Penguin Run ┣ 📂 Character                # 플레이어 관련 디렉토리 ┃ ┣ 📜 PlayerController.cs    # 플레이어 조작 ┃ ┣ 📜 StatHandler.cs         # 플레이어 스탯 관리 ┃ ┣ 📜 AnimationHandler.cs    # 플레이어 애니메이션 관리  ┣ 📂 Camera                   # 카메라 관련 디렉토리 ┃ ┣ 📜 FollowCamera.cs        # 플레이어를 추적하는 카메라 클래스 ┣ 📂 Manager ..

25일차 - PenguinRun 팀 프로젝트 3

▶▷ PenguinRun오늘은 애니메이터와 각종 스크립트 연결 및 플레이어 관련 자잘한 오류들을 수정하였다. 애니메이터달리기 게임이기 때문에 시작부터 Move 상태이고 화살표는 상태 전환을 위한 트랜지션이다.하나의 애니메이션이 다 끝나지 않아도 다른 애니메이션으로 전환될 수 있도록 트랜지션들의 HasExitTime의 체크를 풀어주었고 컨디션 부분에는 각종 bool 및 trigger형 파라미터를 넣어 정상적으로 전환되도록 하였다. AnimationHandlerusing System.Collections;using System.Collections.Generic;using UnityEngine;public class AnimationHandler : MonoBehaviour{ // 애니메이터 파라미터 ..

24일차 - PenguinRun 팀 프로젝트 2

▶▷ PenguinRun오늘은 플레이어가 부스터 아이템을 먹었을 때의 속도 증가 및 무적 효과와 장애물에 부딫였을 때 일시적인 무적 효과를 구현하였다.PlayerControllerpublic class PlayerController : MonoBehaviour{ // 플레이어 상태 변수들 private bool isDead; // 플레이어가 죽었는지 여부 [SerializeField] private bool isJumping; // 점프 상태 여부 [SerializeField] private bool isSliding; // 슬라이딩 상태 여부 // 점프 관련 변수 [SerializeField] private int jumpForce; // 점프 힘 [Serializ..

23일차 - PenguinRun 팀 프로젝트 1

▶▷ PenguinRun쿠x런과 비슷한 게임을 만들 계획을 세웠고 위 이미지들은 대략적인 배치 구도와 클래스 설계 와이어 프레임이다.클래스 설계에는 각 클래스에 어떤 변수와 메소드가 들어갈지 미리 작성해서 이것을 토대로 스켈레톤 코드를 작성한 다음 각자의 구현을 시작하였다. 스켈레톤 코드를 미리 작성하고 시작하니 확실히 나의 할 일이 눈에 잘 들어왔고 머리에 그릴 수 있었다.내가 맡은 부분은 PlayerController 클래스이다. 여기서는 플레이어의 이동에 관한 부분들을 다루고 각종 이벤트와 메서드를 포함한다.using System;using System.Collections;using UnityEngine;public class PlayerController : MonoBehaviour{ //..

22일차 - 디버깅, 단축키, 객체 지향

▶▷ 디버깅디버깅 도구 사용법 (Visual Studio 기준)중단점 (Breakpoint) 설정코드를 특정 지점에서 멈추게 하여 실행 중인 프로그램의 상태를 확인중단점이 설정된 위치에서 코드가 멈추고, 변수를 조사할 수 있음단축키: F9 (중단점 설정/해제)조사식 (Watch Window)변수 값을 실시간으로 모니터링할 수 있는 도구디버깅 중 변수나 표현식을 추가하여 값이 어떻게 변화하는지 추적할 수 있음호출 스택 (Call Stack)함수 호출의 계층 구조를 보여주는 도구코드가 함수 안에서 어떻게 실행되는지 추적하며, 함수 호출 순서를 확인할 수 있음즉시 창 (Immediate Window)디버깅 중간에 실행하거나, 변수를 확인하고 수정하는 도구코드를 입력하여 즉시 결과를 볼 수 있음 디버깅 단축키 ..

21일차 - SimpleMetaverse 트러블 슈팅

▶▷ 트러블 슈팅막히는 부분:1. 점수를 저장하는 과정에서 점수에 관한 변수를 int로 선언했는데 UI에 점수 정보를 넘겨줄 때 string으로 넘겨주어야 해서 오류가 생기는 현상2. 미니게임을 시작했을 때 장애물 생성 위치가 너무 멀리 생성되는 현상3. 미니게임을 마치고 메인 씬으로 돌아왔을 때 캐릭터가 느리게 움직이거나 아예 움직이지 않는 현상4. 오브젝트 스캔을 위해 BaseController에 선언한 scanManager를 플레이어 인스펙터 창에서 할당을 해주려면 PlayerController에 변수를 선언해야 하는데 어떻게 해야할지 막힘5. NPC에게 말을 걸고 한번 더 스페이스바를 눌러야 미니게임 화면으로 넘어가도록 작성했는데 Update문에 스페이스바를 누르는 로직이 있어서 인지 해당 프레임..