코드 및 공부 56

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의 최대 길이를 지정하였다면, 오브젝트가 미리 설정한 범위 내에 존재햐야합니다마지막으로 레..

디자인 패턴 - 싱글톤 패턴(프로퍼티를 이용한 null 체크)

유니티 버전 - 2022.3.48f1     목차들어가며코드 및 설명마치며     들어가며어떤 스크립트에서 싱글톤 패턴을 구현할때 일반적으로 Awake에서 null체크를 하고 instance를 지정해주는 것이 일반적입니다, 하지만 모종의 이유로 스크립트가 붙은 오브젝트 자체가 씬에 없다면 스크립트를 참조하려고 할때 오류가 발생할 것입니다, 프로퍼티를 이용하여 더 안전한 접근을 하는 방법을 구현해보겠습니다      코드 및 설명먼저 Awake입니다, 오브젝트가 활성화 상태로 존재한다면 실행되면서 인스턴스를 지정해줍니다 private void Awake() { if (instance == null) { instance = this; } ..

이벤트 함수의 실행 순서

유니티 버전 - 2022.3.48f1     목차들어가며Legend생명 주기마치며     들어가며Unity에서 게임 오브젝트의 행동과 상호작용을 제어하는 핵심 요소 중 하나가 바로 이벤트 함수입니다, 이러한 함수들은 특정한 타이밍에 Unity 엔진에 의해 자동으로 호출되며, 게임이 시작할 때부터 종료할 때까지 여러 가지 상태 변화에 대응합니다 이벤트 함수들의 실행 순서와 각 함수의 역할에 대해 알아보겠습니다. 게임 로직을 더 효율적으로 관리하고 싶다면, Unity의 이벤트 함수가 어떻게 작동하는지 이해하는 것이 중요합니다    Legend 먼저 유니티에서 제공하는 메뉴얼입니다, 이것을 바탕으로 설명하겠습니다더보기https://docs.unity3d.com/kr/2022.3/Manual/ExecutionO..

Unity - Scripting API를 참고하는 법

유니티 버전 - 2022.3.48f1Scripting API 버전 - 2022.3     목차들어가며Scripting API기본적인 구성Properties (속성)Static Properties (정적 속성)Constructors (생성자)Inherited Members (상속된 멤버들)Public Methods (공개 메서드)Static Methods (정적 메서드)Operators (연산자)Messages (메시지)마치며     들어가며 Vector2를 이용하여 무엇인가 구현하려고 할때, Vector2에서 사용 가능한 옵션들을 알아보기 위한 방법으로, 유튜브나 구글링 등의 방법이 있겠지만 유니티에서 제공하는 공식 Scripting API를 이용하여 궁금한 내용에 대하여 찾아보는 법을 알아보겠습니다  ..

TagManager.preset을 이용한 태그 및 레이어 관리

유니티 버전 - 2022.3.48f1     목차들어가며TagManager.preset이란?TagManager.preset 만들기TagManager.preset 적용하기마치며     들어가며게임 개발을 하다 보면 다양한 객체를 효과적으로 관리하기 위해 태그와 레이어를 사용하게 됩니다, 이러한 태그와 레이어를 설정하고 관리하는 필요한 것이 TagManager.preset입니다 태그와 레이어 설정을 .preset 파일로 저장할 수 있습니다, 이를 통해 팀원 간의 협업이 용이해집니다 TagManager.preset의 사용 방법에 대해 알아보겠습니다.     TagManager.preset 만들기개발을하며 작성한 태그와 레이어가 있다고하겠습니다, 이것을 프리셋으로 저장 시켜보겠습니다   우측 상단의 볼륨 조절하..

using System을 이용한 시간 참조

유니티 버전 - 2022.3.17f1     목차들어가며using System 지시문DateTime시간 관련 유용한 메서드마치며     들어가며System 네임스페이스를 정의하고 그 안의 클래스와 메서드들을 이용하여 시간 관련 유용한 기능들을 알아보겠습니다     DateTime날짜나 시간 정보를 저장하는 데 특화된 구조체 입니다, 연도, 월, 일, 시, 분, 초 등 다양한 정보를 담고 있습니다 먼저 DateTime변수를 선언하고 현재의 날짜와 시간을 출력하여보겠습니다using System;public class Test : MonoBehaviour{ private DateTime dateTime; private void Start() { dateTime = DateTime...

Input System을 이용한 움직임 구현

유니티 버전 - 2022.3.17f1     목차Input System 적용하기Input System 생성 및 설정에셋 만들기Action Type과 Value완성된 코드 및 실행 결과완성코드실행결과마치며참고하면 좋은 자료     Input System 적용하기1. Window의 Pakage Manager를 선택합니다2. 들어가게되면 Packages: In Project로 설정되어있을텐데 클릭하여 Unity Registry로 변경합니다3. 우측의 검색에 input을 검색하거나 직접 찾아서 Install 버튼을 눌러줍니다, 유니티 버전별로 Input System의 버전또한 상이합니다   설치 후 Yes를 눌러 에디터를 재시작합니다     Input System 생성 및 설정   에셋 만들기Input Acti..

Input Manger와 Input System

유니티 버전 - 2022.3.48f1     들어가며오늘은 Input Manager와 Input System의 차이에 대하여 알아보겠습니다   목차Input Manager와 Input System의 정의Input Manager와 Input System의 장점과 단점결론마치며    Input Manager와 Input System의 정의 Input Manager는 유니티의 기본 내장 입력 시스템입니다, Edit -> Project Setting -> Input Manager를 통해 접근가능하며축(Axis)을 정의하고 그에 따라 입력 값을 받아오는 방식입니다 Input System은 유니티의 새로운입력 처리 패키지로, 다양한 입력 장치와플랫폼을 지원하는 이벤트 기반의 입력 시스템입니다, Window -> P..

c# - 프로퍼티

유니티 버전 - 2022.3.44f1      들어가며 프로퍼티란 클래스나 구조체의 필드 값을 제어하는 방법 중 하나입니다, 주로 필드 값을 읽거나 수정할 때 사용되며, 외부 클래스에서 안전하게필드에 접근하도록 하는데 유용합니다   프로퍼티는 왜 사용하는 것 일까요?    테스트라는 클래스가 있다고 가정하겠습니다, 여기에서 health라는 필드의 값을 다른 외부 클래스에서 참조만 하고 수정하지 못하도록 하여 오직 Test 클래스에서만 수정하려고 합니다 지금은 health라는 정보 하나만 보호해야 하므로 GetHealth()와 SetHealth() 메서드 두 개로 해결 가능합니다, 하지만 이러한 변수가 많아진다면 메서드도 그에 따라 증가하고, 유지보수도 힘들고 비효율적입니다 그래서 등장한 것이 프로퍼티입니..