Unity 56

Unity TMP(TextMeshPro) Align - Middle과 Midline의 차이

TMP Alignmiddle과 midline의 차이midline은 선 기준으로 더 텍스트 크기 작을 때 영향 있음https://docs.unity3d.com/Packages/com.unity.ugui@2.0/manual/TextMeshPro/TMPObjectUIText.html#alignment 유니티 TextMesh Pro(TMP)에서 Middle과 Midline은 텍스트의 세로 정렬(Vertical Alignment) 방식 차이이며, 주로 버튼이나 패널에서 글자를 완벽하게 중앙에 배치하고 싶을 때 차이가 발생.핵심 차이는 텍스트의 Bounding Box(전체 높이)를 기준으로 삼느냐, Baseline(글자의 기준선)을 기준으로 삼느냐. 1. Middle (세로 중앙)특징: 텍스트의 전체 높이(Boun..

DMC코넷/Study 2026.05.23

Text Animator 활용

text animator로 글자 꾸미기공식 문서 활용하기적용하고자 하는 TMP에 Text Animator - Text Mesh Pro 컴포넌트 추가https://docs.febucci.com/text-animator-unity/2.x-ko/undefined-1/undefined-2Inspector에서 기본 설정기본 설정 플래그 0으로 맞추기Inspector에서 효과 설정효과 미리보기 및 설정Code에서 효과 설정Ex1. 플레이 중 점수 UI의 숫자 텍스트만 크게 강조scoreText.text = "Score: " + "" + score; // 증가된 점수를 UI 텍스트에 반영Ex2. 게임오버 상태에서 점수 UI의 모든 텍스트 무지개 처리scoreText.text = "Score: " + score;// ..

DMC코넷/Study 2026.05.22

[내배캠][Unity6기][TIL] 풀 반환 오류 트러블슈팅

대환장파티의 풀 반환 오류를 드디어 해결했다!오류의 원인이 되는 부분이 많았어서 하나하나 찾기 쉽지 않았는데 튜터님의 도움으로 해결할 수 있었다. [ 문제 상황 ]1. 풀에 이미 반환된 오브젝트가 2번 반환을 시도2. 풀에서 가져온 타입과 다른 타입으로 풀에 반환3. 풀에 반환할 오브젝트의 인덱스 에러(추후 에러 로그 정보 추가 예정) [ 문제 원인 ] 1. 미니언 반환에서 이중 반환 및 타입이 맞지 않게 반환시키는 부분이 있었다.public class Minion : Monster{ public override void ReturnToVillage() { base.ReturnToVillage(); _summonerMonster.RemoveMinion(this); ..

[내배캠][Unity6기][TIL] 코루틴 중지 트러블슈팅

게임 종료 후에도 스폰 코루틴이 계속 실행되어 전환된 Scene에 인간이 생성되는 문제가 있어 수정했다.public class HumanSpawner : SingletonBase{ public void StopSpawningHumans() { StopAllCoroutines(); // 모든 스폰 코루틴 중지 }}public class GameManager : SingletonBase{ public void ReturnObjects() { HumanSpawner.Instance.StopSpawningHumans(); }}위와 같이 스테이지가 종료 및 재시작되는 모든 상황에서 스폰 코루틴이 멈추도록 수정했다.StopAllCoroutines는 해당..

[내배캠][Unity6기][TIL] 다중 스폰 포인트

기존에 1개의 스폰포인트에서 인간이 생성되도록 설계했는데, 스테이지에 스폰포인트가 추가되며 로직을 확장성 있게 수정하였다.public class StageManager : SingletonBase{ public List StartPointList { get; private set; } // 스테이지의 시작점과 종료지점 캐싱 private void SetPointInfo() { StartPointList = new List(); GameObject[] spawnPoints = GameObject.FindGameObjectsWithTag("HumanSpawnPoint"); if (spawnPoints == null || spawnPoints.Leng..

[내배캠][Unity6기][TIL] ObjectDisposedException 트러블슈팅

[ 문제 상황 ]GameManager에서 활성화된 오브젝트들의 리스트를 관리하고 있는데ObjectDisposedException과 type is not a supported pptr value 에러가 발생했다.public class GameManager : SingletonBase{ public List activeHumans = new List(); public List activeMonsters = new List();}public class Human : MonoBehaviour{ protected virtual void OnEnable() { GameManager.Instance.activeHumans.Add(this); } protected virtu..

[내배캠][Unity6기] 모의 면접 준비 (4)

- 마지막 멘트는 질문도 좋지만 더욱 자신을 어필할 수 있는 각오 메시지 준비하기- 지원 동기를 회사의 컬쳐핏과 인재상 잘 엮어서 준비하기- 본인이 한 프로젝트 관련하여 설명할 때 개발자 관점에서 서술(e.g., 기술적 의사결정) Q. 콜백 함수에 대해 서술하세요.A.특정 작업이 완료되면 호출되는 함수로 주로 델리게이트를 사용하여 구현.이벤트가 발생 시 호출될 함수들을 미리 이벤트에 구독해두면 이벤트 발생시 연결된 함수들이 자동으로 호출.사용예) 게임 종료 이벤트 발생시에 처리해야하는 작업들을 함수로 만들고 종료될 때 호출되도록 설계. Q. 박싱 언박싱에 대해 서술하세요.A.박싱: 값 -> 참조 변환. 스택에 저장된 값 형식의 데이터를 힙 메모리에 저장하고, 힙 메모리에 저장된 객체의 참조 주소를 다시 ..

[내배캠][Unity6기][TIL] 데이터 로드 리팩토링 (2)

인간 데이터를 받아올 때 Human과 HumanController, 2개의 클래스에서 모두 데이터를 들고 있는 것이 불필요해 보인다는 피드백을 받았다.변경해서 사용할 데이터도 아니고 한번 받아오고 변수로 저장해 사용하고 있다.그래서 Awake 순서만 잘 맞춰서 한쪽에서 로드한 데이터를 다른 쪽에서 초기화하는 방식으로 변경했다. [ 변경 과정 ]1. Human -> HumanController 로 Awake 순서 조정(컴포넌트 추가 순서 조정, or project setting에서 변경하기)2. Human의 Awake에서 Data 받아오고 HumanController 연결3. HumanController의 데이터 세팅4. HumanController에서 데이터 불러오는 부분 삭제 [ 수정 전 ]public..

[내배캠][Unity6기][TIL] 데이터 로드 리팩토링

중간 발표 피드백을 토대로 데이터 로드 방법을 변경했다. 1. 각각의 스크립트에서 관리하지 않고 하나의 DataManager에서 로드하여 관리2. SO 사용하지 않고 불러온 json 데이터 바로 사용3. 여러 파일(namespace) 분리하지 않고 하나의 파일에서 sheet(class)를 분리하여 테이블 관리 WaveData는 하나의 테이블로 병합했으면 좋겠다고 하셔서 idx를 1000번대로 만들어 식별하도록 만들었다.처음에 StageId와 WaveIdx 2개를 기반으로 찾으려고 하니 StageId가 중복되어 Dictionary key 값을 새로 만들어줘야 하는 문제가 있었다. 그래서 그냥 WavdIdx를 1000번대로 만들어 데이터를 가져오고 HumanSpawner 측에서 계산하여 식별하도록했다. Aw..

[내배캠][Unity6기][TIL] 동적 생성 메서드 경로 설정 리팩토링

Resources.Load로 동적 생성을 할 때 Resource 폴더 내 경로를 통해 오브젝트를 가져온다.이때 메서드 내에 경로 설정을 해놓은 경우 오타 발생 시 문제점을 한 번에 파악하기 어렵고, 폴더 이동 시 해당 메서드 내 문자열을 찾아 변경해주어야 하므로 유지보수가 힘들다.const string으로 경로명을 변수처럼 사용하면 이러한 문제점을 해결할 수 있다. [ 수정 전 ]public class UIManager : SingletonBase{ public T Show(string path) where T : UIBase { string uiName = typeof(T).ToString(); UIBase go = Resources.Load(path + uiName..