728x90

2025/03 18

내일배움캠프 Unity - TIL : 25.03.27

오늘 학습한 내용1) Unity EditorWindow Unity에서는 EditorWindow를 활용하여 커스텀 에디터 창을 만들 수 있습니다.이번에 구글 스프레드시트에서 데이터를 다운로드하고 ScriptableObject(SO)를 생성 및 적용하는 툴을 제작하였습니다.이 툴을 통해 유닛(Unit) 및 몬스터(Monster) 데이터를 가져와 게임 내에서 활용할 수 있습니다. EditorWindow를 활용한 커스텀 툴 구현  using UnityEditor;using UnityEngine;using System.Collections.Generic;public class DataDownloaderWindow : EditorWindow{ private List myObj = new List(); [..

내일배움캠프 2025.03.27

내일배움캠프 Unity - TIL : 25.03.26

개요Unity의 기본 인스펙터는 자동으로 MonoBehaviour 스크립트의 변수를 표시하지만, 복잡한 기능을 추가하기에는 한계가 있습니다.이를 해결하기 위해 CustomEditor를 사용하면 사용자 정의 UI 및 기능을 인스펙터에 추가할 수 있습니다.CustomEditor를 활용한 기본적인 확장using UnityEditor;using UnityEngine;// MyComponent의 인스펙터를 확장하는 Custom Editor[CustomEditor(typeof(MyComponent))]public class MyComponentEditor : Editor{ public override void OnInspectorGUI() { // 기존 인스펙터 UI 유지 Dra..

내일배움캠프 2025.03.26

내일배움캠프 Unity - TIL : 25.03.25

오늘 학습한 내용1) 코루틴 new 키워드 사용 줄이기 yield return new WaitForSeconds(1f);를 반복적으로 호출하면 매번 새로운 객체를 생성하여 GC(가비지 컬렉션) 부담이 증가WaitForSeconds 객체를 미리 선언하고 재사용하는 방식으로 최적화 가능 2) 연산 순서 고려하기 벡터 연산과 스칼라 연산을 혼합할 때 연산 순서가 성능에 영향을 줄 수 있음speed * Time.deltaTime * dir 방식이 dir * speed * Time.deltaTime보다 연산 효율이 높음스칼라 연산을 먼저 수행하고 벡터 연산을 나중에 실행하는 것이 성능에 유리함문제 및 해결 과정1) 문제 (코루틴을 사용할때 성능 저하 문제)  yield return new WaitForSecond..

내일배움캠프 2025.03.25

[Unity] 확장메서드

Unity 개발을 하다 보면 특정 기능을 여러 스크립트에서 반복적으로 사용해야 하는 경우가 많습니다. 이때 확장 메서드(Extension Method) 를 활용하면 기존 클래스의 코드를 수정하지 않고도 기능을 추가할 수 있어 코드의 재사용성과 가독성을 크게 향상시킬 수 있습니다. 1. 확장 메서드란?확장 메서드는 C#의 기능 중 하나로, 기존 클래스의 코드를 수정하지 않고도 새로운 메서드를 추가할 수 있는 기능입니다. 주로 static 클래스를 이용하여 특정 타입(클래스, 구조체 등)에 새로운 메서드를 정의할 수 있습니다. 확장 메서드의 특징기존 클래스를 수정하지 않고도 새로운 기능 추가 가능static 클래스를 사용하며, 확장 대상 메서드는 this 키워드를 사용하여 정의재사용성이 높아 코드 중복을 줄..

Unity/정보 2025.03.23

[Unity] transform.root - 최상위 객체 찾기

Unity에서 충돌 감지를 할 때 하위 오브젝트가 부딪히더라도 최상위 부모 오브젝트(Player)를 찾아야 하는 경우가 있습니다. 예를 들어, PlayerController가 Player 오브젝트에 붙어 있고 플레이어의 손이나 발 같은 하위 오브젝트가 충돌을 감지할 때, 어떻게 최상위 PlayerController에 접근할 수 있을까요? 1. 기존 방식의 문제점보통 GetComponentInParent() 또는 FindObjectOfType()를 사용해서 부모 오브젝트를 찾곤 합니다. 하지만 이러한 방식에는 몇 가지 단점이 있습니다.FindObjectOfType()는 씬 전체에서 오브젝트를 검색하므로 성능 저하가 발생할 수 있음.GetComponentInParent()는 부모 계층을 순차적으로 탐색하기 ..

Unity/정보 2025.03.23

[Unity] AudioSource.PlayClipAtPoint

Unity에서는 AudioSource.PlayClipAtPoint를 사용하면 간단하게 특정 위치에서 효과음을 재생할 수 있습니다. 이번 글에서는 PlayClipAtPoint의 장점과 한계를 살펴보고, 필요한 경우 대체할 수 있는 방법까지 다뤄보겠습니다.1. 기존 방식일반적으로 Unity에서 효과음을 재생하려면 다음과 같은 방식으로 AudioSource 컴포넌트를 직접 추가하고 관리해야 합니다.사전에 AudioSource가 포함된 GameObject를 배치해야 함스크립트에서 AudioSource를 생성하고 Play()로 소리를 재생시켜야함사운드가 끝난 후 GameObject를 삭제 또는 비활성화해야 함이러한 방식은 효과음이 많아질수록 관리가 복잡해질 수 있습니다. 2. AudioSource.PlayClip..

Unity/정보 2025.03.23

내일배움캠프 Unity - TIL : 25.03.19

오늘 학습한 내용1) Fog 설정 시 빌드에서 적용되지 않는 문제 해결 Unity 에디터에서는 Fog가 정상적으로 보이지만 빌드 후에는 적용되지 않는 문제가 발생했다.이를 해결하기 위해 Project Settings > Graphics에서 Fog 설정을 Auto에서 Custom으로 변경하고, 사용 중인 FogMode 옵션만 체크하는 방식으로 수정했다.문제 및 해결 과정1) 문제 (Fog가 빌드 후 적용되지 않는 문제) Unity 에디터에서는 Fog가 정상적으로 보였으나 빌드 후 실행 시 Fog가 사라지는 현상이 발생했다.Project Settings에서 Fog 설정이 Auto로 되어 있어, 빌드된 환경에서는 특정 플랫폼에서 자동으로 Fog가 비활성화되는 문제가 있었음.  시도한 해결 방법Project S..

내일배움캠프 2025.03.19

내일배움캠프 Unity - TIL : 25.03.18

오늘 학습한 내용1) 3D 오브젝트 최적화와 Mesh Combiner 활용 씬에 많은 오브젝트를 배치하면서 최적화를 고민하고 적용해 보았다.Mesh Combiner 에셋을 이용하여 비슷한 부류의 오브젝트들을 하나의 메쉬로 병합해 최적화를 시도했다.하지만 객체의 위치를 고려하지 않고 단순히 비슷한 것들끼리 묶다 보니 오클루전 컬링(Occlusion Culling)을 고려하지 못했다.문제 및 해결 과정1) 문제 (Mesh Combiner 적용 후 Batches 수 증가) 비슷한 오브젝트끼리 무작정 병합했더니 Batches 수가 오히려 증가하는 현상이 발생했다.오클루전 컬링이 정상적으로 작동하지 않아, 보이지 않는 오브젝트들도 렌더링되는 문제가 발생했다. 시도한 해결 방법메쉬 병합을 적용하기 전과 후의 Bat..

내일배움캠프 2025.03.18

내일배움캠프 Unity - TIL : 25.03.14

오늘 학습한 내용점프 후 벽과의 충돌 보정하기 3D 캐릭터가 점프 후 벽에 닿으면 멈추거나 예상과 다른 물리적 반응을 보이는 경우가 있다. 예를 들어, 오버워치에서는 캐릭터가 올라갈 수 없는 건물 지붕 등에 도달하면 떠 있는 상태로 천천히 미끄러지는 효과가 적용된다. 이를 참고하여, 점프하거나 떨어지는 등 공중에 체공하는 동안 보다 자연스러운 물리적 반응이 이루어지도록 보정해 보았다.  문제 및 해결 과정문제 (점프 후 벽에 부딪히면 캐릭터가 멈춰버리는 현상) 점프 후 벽에 부딪히면 캐릭터가 멈추거나 특정 벽에 붙어서 움직이지 않는 현상 발생.캐릭터가 기대한 대로 자연스럽게 밀려나거나 미끄러지는 동작이 구현되지 않음.  시도한 해결 방법 지면에서는 전용 Physics Material 적용 → 정상적인 물..

내일배움캠프 2025.03.14
728x90