728x90

2025/03 18

내일배움캠프 Unity - TIL : 25.03.13

오늘 학습한 내용1) 화면 전환 효과를 위한 CanvasGroup 활용  기존에는 SetActive(false) 또는 Animator를 활용하여 화면 전환 효과를 구현했지만, CanvasGroup을 사용하면 더욱 간단하고 효과적으로 페이드인/페이드아웃을 적용할 수 있다는 것을 학습하였습니다. 방법:UI의 Panel에 CanvasGroup 컴포넌트를 추가alpha 값을 조절하여 투명도를 변경blocksRaycasts와 interactable을 활용하여 클릭 이벤트 및 인터랙션 제어적용 예시 (코루틴 활용)IEnumerator Fade(CanvasGroup canvasGroup, float targetAlpha, float duration){ float startAlpha = canvasGroup.al..

내일배움캠프 2025.03.13

내일배움캠프 Unity - TIL : 25.03.12

오늘 학습한 내용1) ScriptableObject에서 기능 구현기존에는 ScriptableObject를 오직 데이터(변수 값)를 저장하는 용도로만 사용하였으나,아이템의 기능까지 ScriptableObject에서 구현하여 활용하는 방식도 가능하다는 점을 알게 되었습니다.이를 통해 별도의 스크립트에서 아이템 기능을 따로 구현할 필요 없이,각 아이템이 자신만의 효과를 ScriptableObject 내에서 정의하고 실행할 수 있습니다.문제 및 해결 과정1) 문제 ScriptableObject를 단순히 데이터 저장소로만 사용했기 때문에,아이템의 기능을 별도의 아이템 관리 스크립트에서 구현해야 했습니다.여러 종류의 아이템이 존재할 경우, 관리 코드가 복잡해지고 유지보수가 어려워질 가능성이 있었습니다.  시도한 해..

내일배움캠프 2025.03.12

[Unity] Script Execution Order 설정 (스크립트별 실행 순서 설정)

Unity에서 여러 스크립트가 실행될 때 Awake(), OnEnable(), Start() 등의 초기화 함수가 실행되는 순서는 중요합니다. 특히 Awake()가 OnEnable()보다 항상 먼저 실행된다고 보장되지 않는 경우가 있어 예상치 못한 Null 참조 오류가 발생할 수도 있습니다.이번 글에서는 Script Execution Order(스크립트 실행 순서)를 설정하여 이러한 문제를 해결하는 방법을 알아보겠습니다.1. Unity의 기본 실행 순서Unity는 게임 오브젝트가 활성화될 때 특정 순서대로 메서드를 호출합니다.Awake()OnEnable()Start()기타 업데이트 관련 메서드 (Update, FixedUpdate 등)보통 Awake()에서 객체의 참조를 설정하고, OnEnable()에서는..

Unity/정보 2025.03.12

내일배움캠프 Unity - TIL : 25.03.11

오늘 학습한 내용1) Awake()가 항상 OnEnable()보다 먼저 실행되는 것은 아니다. 일반적으로 Awake()가 OnEnable()보다 먼저 실행되지만 이는 100% 보장되는 규칙이 아니었습니다.프로젝트 실행 시 특정 참조값을 Awake()에서 초기화한 후 OnEnable()에서 해당 값을 사용하려 했으나 null이 발생하는 문제가 있었습니다.  2) Script Execution Order 설정을 통해 실행 순서를 제어할 수 있다. Unity에서는 Edit > Project Settings > Script Execution Order 메뉴를 통해 특정 스크립트의 실행 순서를 지정할 수 있습니다.이를 활용하여 GameManager의 Awake()가 PlayerController의 OnEnabl..

내일배움캠프 2025.03.11

내일배움캠프 Unity - TIL : 25.03.07

오늘 학습한 내용AudioSource.PlayClipAtPoint AudioSource.PlayClipAtPoint는 특정 위치에서 AudioClip을 재생하는 메서드로 별도의 AudioSource 컴포넌트를 직접 관리하지 않고도 일회성 사운드를 쉽게 재생할 수 있는 기능입니다.이 메서드는 지정한 위치에 임시 AudioSource를 생성해 사운드를 재생한 후 자동으로 제거되므로 코드가 간결해집니다. 문제 및 해결 과정문제기존에는 사운드를 재생하기 위해 Scene 내에 AudioSource 컴포넌트를 미리 배치하거나, 매번 생성하고 관리해야 하는 번거로움이 있었습니다.  시도한 해결 방법 AudioSource.PlayClipAtPoint를 사용하여 사운드를 재생할 위치와 AudioClip 그리고 볼륨을 ..

내일배움캠프 2025.03.07

내일배움캠프 Unity - TIL : 25.03.06

오늘 학습한 내용1) InputSystem 보간을 통한 Blend Tree 애니메이션 적용 새로운 InputSystem은 기존의 Input.GetAxis와 달리 최종 값만 반환하기 때문에 바로 Blend Tree에 적용하면 애니메이션 전환이 자연스럽지 않고 끊기는 현상이 발생함을 확인했습니다.이를 해결하기 위해 Update() 내에서 현재 값(smoothDir)과 최종 입력 값(targetDir) 사이를 보간하기 위해 Vector2.Lerp() 함수를 사용하였습니다.구체적으로 아래와 같이 작성하여 자연스러운 애니메이션 전환을 구현하였습니다: smoothDir = Vector2.Lerp(smoothDir, targetDir, smoothTime); 여기서 targetDir은 InputSystem을 통해 받..

내일배움캠프 2025.03.06

내일배움캠프 Unity - TIL : 25.03.05

오늘 학습한 내용1) 제네릭 캐싱을 통한 GetComponent 최소화 캐릭터가 적을 공격할 때, OnColliderEnter 같은 이벤트를 이용해 적의 콜라이더를 감지하고, 해당 콜라이더에 부착된 적 스크립트를 가져와 데미지를 주는 과정에서 매번 GetComponent를 호출하면 성능에 부담이 생길 수 있습니다.제네릭을 활용한 캐싱 방식을 사용하면, 한 번 호출한 GetComponent의 결과를 저장해두고 재사용할 수 있어, 코드의 효율성과 성능이 크게 향상된다는 것을 배웠습니다.public static class ComponentCache{ private static Dictionary> cache = new Dictionary>(); public static T GetCachedCompo..

내일배움캠프 2025.03.05

내일배움캠프 Unity - TIL : 25.03.04

오늘 학습한 내용1) 인풋시스템 다이렉트 방식 소규모 프로젝트에 적합하며 간단한 입력 처리를 직접 구현할 수 있는 방식입니다. 2) 인풋시스템 임베디드 방식 각 캐릭터별로 개별 입력 설정이 필요한 경우에 사용하며 세부 설정을 통해 정교한 입력 처리가 가능합니다.  3) C# 제너레이트 방식 대규모 프로젝트에 추천되는 방식으로 자동화된 코드 생성 기능을 활용하여 보다 효율적으로 입력 시스템을 구현할 수 있습니다. 새롭게 알게 된 점인풋시스템에는 위와 같이 세 가지 방식이 존재하며 각 방식마다 프로젝트의 규모와 요구사항에 따라 장단점이 있다는 점을 배웠습니다. 이러한 다양한 입력 처리 방법을 간단하게 사용할 수 있다는 사실이 매우 인상적이었습니다. 앞으로의 계획앞으로 있을 개인 과제와 팀 과제에 적합한 인..

내일배움캠프 2025.03.04
728x90