오브젝트 파괴 시 OnDestroy 이벤트 함수가 호출되지 않을 수 있다??
·
Unity/Tip
Unity에서 GameObject를 삭제하면 OnDestroy 메서드가 호출됩니다. OnDestroy 메서드는 GameObject가 삭제되기 전에 실행되는 메서드로, GameObject의 자원 해제, 데이터 저장 등의 작업을 수행하는 데 사용됩니다. 하지만, OnDestroy 메서드의 호출은 보장되지 않습니다. 즉, GameObject가 삭제되더라도 OnDestroy 메서드가 호출되지 않을 수도 있습니다. 공식문서의 설명을 보면 MonoBehaviour를 상속 받는 객체가 파괴 될 때 호출된다고 적혀 있습니다. 이 글을 보시는 분들은 다들 이 부분은 알고 계실것이라 생각합니다. 그 아래에 중요한 내용이 적혀 있는데 OnDestroy는 이전에 활성화되어있던, 게임 오브젝트상에서만 호출됩니다. 즉, 호출이 ..
월드 공간 지점을 스크린상의 지점으로 변환 : WorldToScreenPoint
·
Unity
Unity에서 WorldToScreenPoint 메서드는 월드 공간의 지점을 스크린 공간의 지점으로 변환하는 데 사용됩니다. public Vector3 WorldToScreenPoint(Vector3 position) position : 월드 공간의 지점입니다. 이 메서드는 다음과 같은 스크린 공간의 지점을 반환합니다. 스크린 공간의 x좌표는 worldPoint의 x좌표와 카메라의 LookAt 방향의 x좌표의 비율에 해당합니다. 스크린 공간의 y좌표는 worldPoint의 y좌표와 카메라의 LookAt 방향의 y좌표의 비율에 해당합니다. 예제 다음은 WorldToScreenPoint 메서드를 사용하는 예제입니다. // 월드 공간의 좌표 (0, 0, 1)을 스크린 공간의 지점으로 변환합니다. Vector3..
화면 위치에 해당하는 Ray 생성 : Camera.main.ScreenPointToRay
·
Unity
Unity에서 Camera.main.ScreenPointToRay 함수 사용하기 Unity에서 카메라의 시야에 있는 스크린 상의 점을 광선으로 변환하는 데 사용되는 함수가 Camera.main.ScreenPointToRay입니다. 이 함수는 다음과 같은 인수를 사용합니다. screenPoint : 스크린 상의 점의 좌표입니다. worldUp : 카메라의 월드 업 벡터입니다. 이 함수는 다음과 같은 반환 값을 가집니다. ray : 스크린 상의 점을 나타내는 광선입니다. 사용 예제 void Update() { // 스크린 상의 점을 가져옵니다. Vector3 screenPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition); // 스크린 상의 점을 광선으로..
C#에서 class와 struct의 차이점
·
C#
C#에서 class와 struct는 모두 데이터와 함수를 포함하는 사용자 정의 데이터 형식입니다. 하지만 두 형식에는 몇 가지 중요한 차이점이 있습니다. class와 struct의 주요 차이점 특징 class struct 크기 객체 헤더와 데이터로 구성되어 있어 일반적으로 struct보다 크기가 큽니다. 데이터로만 구성되어 있어 일반적으로 class보다 크기가 작습니다. 포인터 객체는 포인터를 통해 참조됩니다. 구조체는 값으로 전달됩니다. 참조 투명성 객체의 값을 수정하면 참조하는 모든 객체의 값이 수정됩니다. 구조체의 값을 수정하면 원본 구조체의 값만 수정됩니다. 상속 class는 상속을 지원합니다. struct는 상속을 지원하지 않습니다. 포함 class는 다른 class를 포함할 수 있습니다. st..
Unity의 Character Controller : 간단하게 움직임 구현
·
Unity
Unity의 Character Controller는 3인칭 또는 1인칭 플레이어 캐릭터의 움직임을 제어하는 데 사용되는 컴포넌트입니다. Character Controller는 Rigidbody와 달리 물리적 충돌을 고려하지 않으며, 플레이어의 입력을 사용하여 캐릭터의 움직임을 제어합니다. Character Controller의 주요 기능은 다음과 같습니다. 플레이어의 입력을 사용하여 캐릭터의 움직임을 제어합니다. 플레이어가 장애물과 충돌할 때 충돌 처리를 수행합니다. 플레이어가 계단이나 경사로를 올라갈 때의 움직임을 제어합니다. Character Controller를 사용하려면 먼저 오브젝트에 Character Controller 컴포넌트를 추가해야 합니다. Character Controller 컴포넌트..
Python 패키지 관리하기
·
파이썬/Basic
Python은 다양한 패키지를 제공하여 개발자들의 생산성을 높여줍니다. 패키지는 Python 코드를 재사용할 수 있도록 도와주는 모듈의 집합입니다. Python에서 패키지를 관리하기 위해서는 pip 명령어를 사용합니다. pip 명령어는 패키지 설치, 업그레이드, 제거, 목록 확인 등을 수행할 수 있습니다. 패키지 설치 패키지를 설치하려면 다음과 같이 pip install 명령어를 사용합니다. pip install 패키지명 예를 들어, requests 패키지를 설치하려면 다음과 같이 명령을 실행합니다. pip install requests 설치된 패키지 목록 확인 설치된 패키지 목록을 확인하려면 다음과 같이 pip list 명령어를 사용합니다. pip list 이 명령어는 설치된 패키지의 이름과 버전을 출..
Windows 환경에서 Firebase 사용 시 발생하는 Unable to resolve reference 'UnityEditor.iOS.Extensions.Xcode' 에러 해결
·
Unity/Firebase
Unity에서 Firebase를 사용하려는 경우, Windows 환경에서 다음과 같은 에러가 발생할 수 있습니다. 이 에러는 Unity Editor의 iOS Build 모듈이 설치되어 있지 않아 발생합니다. 이 에러를 해결하려면 다음과 같이 해당 Unity Editor의 iOS Build 모듈을 설치합니다. 1. Unity Hub를 실행합니다. 2. 설치를 선택합니다. 3. 에러가 발생한 프로젝트의 에디터 버전의 모듈 추가를 클릭합니다. 4. iOS Build Support를 선택하고 설치합니다. 5. 모듈이 설치가 완료되면 Unity Editor를 다시 시작합니다.
C# Linked List
·
C#
C#의 링크드 리스트는 연결 리스트라고도 불리며, 각 요소가 다음 요소에 대한 포인터를 가지고 있는 구조입니다. 링크드 리스트는 다음과 같은 특징을 가지고 있습니다. 삽입/삭제 작업이 빠릅니다.링크드 리스트에서 삽입/삭제 작업을 수행할 때는 리스트의 요소를 이동할 필요가 없습니다. 따라서, 삽입/삭제 작업은 O(1)의 시간 복잡도를 갖습니다. 검색 작업이 느립니다. 링크드 리스트에서 검색 작업을 수행할 때는 리스트의 모든 요소를 순회해야 합니다. 따라서, 검색 작업은 O(n)의 시간 복잡도를 갖습니다. 메모리 사용이 효율적입니다. 링크드 리스트는 리스트의 요소가 사용되지 않을 때 자동으로 메모리에서 해제됩니다. 따라서, 메모리 사용이 효율적입니다. 구현 링크드 리스트를 구현하기 위해서는 다음과 같은 코드..