전체 글 55

OnValidate()을 이용한 SO 데이터 관리

유니티 버전 - 2022.3.17f1     목차OnValidate()ValidateCheckItemCode결과     OnValidate()유니티에서 제공하는 이벤트 함수이고, 인스펙터 창에서 스크립트 컴포넌트의 속성을 변경할 때 호출됩니다관리하는 ScriptableObjectAssets이 많아질수록(이하 SO), 값을 빼먹거나 관리되지 못하는 SO 내의 데이터가 발생할 수 도 있습니다, 에디터 환경에서 OnValidate()를 이용하여 관리해보도록 하겠습니다   데이터의 일부만 가져왔습니다, 대표격으로 itemCode가 제대로 입력되어있는지 확인하기 위하여 아래와 같이 코드를 작성합니다public int itemCode;#if UNITY_EDITOR private void OnValidate()..

Instantiate시 오브젝트가 Addtive씬에 생기는 문제

유니티 버전 - 2022.3.17f1     목차Instantiate시 오브젝트가 Addtive씬에 생기는 문제     Instantiate시 오브젝트가 Addtive씬에 생기는 문제 아래 Hierarchy를 보면 InGame(Clone)은 InGame씬에 정상적으로 생겼지만 InGame오브젝트가 만든 PlayerInfomationPopup(Clone)는 Farm씬에 생겼습니다, 이렇게되면 씬을 이동할때 Farm 씬이 언로드되고 다른 씬이 켜졌을때 팝업이 사라지게되어 곤란해질 것 입니다   이것을 해결하기 위해 간단하게 스크립트를 작성해줍니다제가 사용하는 씬은 메인 씬위의 다른 씬을 계속 해서 교체해주는 방식입니다, 그리고 빌드 인덱스는 Title이 0, 메인 씬이 1이기 때문에 빌드상의 첫번째인 InG..

유니티에서 픽셀 폰트를 TMP 폰트 에셋으로 만들기

유니티 버전 - 2022.3.17f1     목차폰트 설정Font Asset CreatorAtlas     폰트 설정폰트 사이즈는 다운받으신 곳에서 지정해준 크기를 사용하거나 파일을 끌어왔을때 지정되어있던 사이즈를 사용합니다폰트의 인스펙터에서 Rendering Mode를 Hinted Raster로 바꿉니다폰트의 이름(다운로드 받은 폰트.ttf)은 영어로 지정합니다언급하지 않은 것은 사진을 따라가면 됩니다     폰트 설정해당 경로에 들어가 Font Asset Creator를 켜줍니다   Render Mode를 확인하고 Generate Font Atlas를 클릭합니다   생성 완료 후 저장 해줍니다Excluded characters가 0이 되어야 합니다, 만약 저 자리가 0을 넘어간다면 Atlas Reso..

씬의 이벤트 실행 순서(Awake, Start 이외)

유니티 버전 - 2022.3.17f1     목차RuntimeInitializeOnLoadMethodSceneManager.sceneLoaded전체 정리(실행 순서)     RuntimeInitializeOnLoadMethod먼저 RuntimeInitializeOnLoadMethod 입니다, 해당 어트리뷰트를 사용하는 메서드는 반드시 스태틱이여야합니다, 자세한 설명은 공식문서를 참고 바랍니다, 실행순서는 가장 아래에 기술하겠습니다   더보기 Unity - Scripting API: RuntimeInitializeOnLoadMethodAttributeRuntimeInitializeOnLoadMethodAttribute class in UnityEngine / Inherits from:Scripting.Pr..

Application.dataPath와 Application.persistentDataPath

유니티 버전 - 2022.3.48f1     목차Application.dataPath 와 Application.persistentDataPathPath.Combine()와 문자열 연산+      들어가며파일 경로나 디렉터리를 다룰 때, Application.dataPath와 +를 이용하여 경로를 연결하는 방법은 흔하게 사용됩니다Application.persistentDataPath와 Path.Combine과 비교하여 장단점과 메모리 사용량, 성능 차이를 다뤄보겠습니다     Application.dataPath 와 Application.persistentDataPath위의 둘은 다른 방식이지만 게임 데이터 파일에 접근하기 위한 경로를 반환합니다, 하지만 둘의 목적이 다르고 Application.dataP..

Cinemachine과 Pixel Perfect Camera

유니티 버전 - 2022.3.17f1     목차Lens -> Ortho SizeCinemachine 설정Camera 설정     Lens -> Ortho Size16 PPU의 스프라이트를 이용하고, 16:9 비율을 사용한다고 가정하겠습니다 A는 Ortho Size입니다, 스크린의 1/2 크기를 나타냅니다B는 세로 픽셀 개수 입니다, 현재 270 픽셀을 보여주고자 합니다C는 가로 픽셀 개수 입니다, 현재 16:9 비율의 픽셀을 보여주고자 합니다 A를 구하기위해서는 먼저 화면에 보여주고싶은 픽셀의 개수를 생각해봐야합니다, 세로로 270픽셀을 보여주는 기준입니다 화면의 전체 높이(B)는 270이고, 270 = X * 16 일 것입니다 X의 값을 구해보면 16.875라는 값이 나오고, 자연스럽게 A(Ortho..

Debug

유니티 버전 - 2022.3.48f1     목차Debug 클래스자주 사용되는 Debug마치며     Debug 클래스Debug 클래스는 Unity에서 디버깅을 위한 다양한 기능을 제공하는 정적 클래스입니다게임 개발 중 발생하는 문제를 추적하고, 게임의 상태를 확인하며, 코드 실행 중의 정보 출력을 용이하게 해줍니다개발을 할때 Debug 클래스를 이용하여 다양한 로그 메시지를 출력할 수 있으며, 이를 통해 게임의 로직을 분석하고 버그를수정하는 데 도움을 받을 수 있습니다 아래에는 Debug. Log / LogWarning / LogError / Assert / DrawRay에 대하여 다루고 있습니다    자주 사용되는 Debug Debug.Log게임 실행 중 일반 정보를 출력할 때 사용합니다, 게임의 상..

콘솔 창(Console)

유니티 버전 - 2022.3.48f1     목차콘솔 창마치며     콘솔 창Unity의 콘솔 창은 게임 개발 중 디버깅과 문제 해결을 위해 필수적인 도구입니다 로그, 경고, 오류를 관리하고, 메시지를 필터링 및 검색할 수 있는 기능을 통해 게임의 실행 상태를 쉽게 확인하고, 발생하는 문제를 신속하게 해결할 수 있습니다  콘솔 창을 살펴보겠습니다   Clear먼저 Clear입니다, 해당 버튼을 누르면 콘솔창의 메시지들을 모두 지웁니다아래 옵션을 이용하여 해당 동작 수행시 자동적으로 Clear 해줍니다    Collapse반복해서 발생하는 메시지를 모두 표시하는 대신 첫번째 인스턴스만 보여줍니다    Error PauseDebug.LogError을 스크립트에서 호출할 때마다 재생을 일시 정지 합니다   검..

RaycastAll과 RaycastNonAlloc

유니티 버전 - 2022.3.48f1     목차RaycastAll과 RaycastNonAlloc의 차이RaycastNonAlloc 이용RaycastNonAlloc 응용마치며  RaycastAll과 RaycastNonAlloc의 차이RaycastAll과 RaycastNonAlloc는 둘 다 Ray를 사용하여 오브젝트와의 충돌을 감지하지만, 성능과 메모리 사용 측면에서 차이가 있습니다 구분RaycastAllRaycastNonAlloc메모리 할당매 호출 시마다 새로운 배열 생성 미리 정의된 배열 사용으로 메모리 최소화GC의 부담높음낮음반환 오브젝트충돌한 모든 오브젝트의 정보 반환배열 크기 내에서의 충돌 정보만 반환(나머지는 버려짐)적합한 상황가끔 호출되고, 충돌시의 모든 정보가 필요할때빈번히 호출되고, 최적..

Physics.Raycast

유니티 버전 - 2022.3.48f1     목차Raycast란Raycast와 RaycastHit마치며     Raycast란Raycast는 가상의 광선(Ray)를 특정 방향으로 쏘아 그 경로에서 충돌하는 물체를 감지하는 기능입니다, 이를 통해 광선에 맞은 오브젝트의 정보를 얻을 수 있습니다     Raycast와 RaycastHit   RaycastRaycast를 사용하기 위해서 선행되는 조건은 다음과 같습니다 Ray에 맞은 오브젝트의 정보를 가져오기 위해서는 오브젝트에 Collider가 존재해야합니다Raycast에 레이어 마스크를 사용하는 경우, 오브젝트가 지정된 레이어에 속해야만 Ray에 의하여 감지됩니다Ray의 최대 길이를 지정하였다면, 오브젝트가 미리 설정한 범위 내에 존재햐야합니다마지막으로 레..