Unity&C#/Unity 17

[C#] [field : SerialiableField]

강의를 보던중 [field : SerialiableField][field : Range()] [field : Header()]라고 쓰시는걸 발견했다.[SerialiableField] [Range()] [Header]는 많이 봤는데 앞에 필드가 붙어서 의아했다.Property도 인스팩터창에서 보고 싶어..![SerialiableField]를 하면 기본적으로 private 필드를 인스팩터 창에서 볼 수 있다. 하지만, 프로퍼티는 그렇지 못했다.프로퍼티를 직렬화 하기 위한 방법이 [field : SerialiableField] 였던것..![Range][Header]또한 앞에 field를 붙이면 프로퍼티에 적용이 되는 것 이다.

Unity&C#/Unity 2024.11.15

[Unity] ParticleSystem

개인과제 진행 중, 파티클 옵션에 대해 헷갈려서 정리.Particle System ModulesMainModule파티클의 초기상태를 제어하거나 여러가지 설정들을 조절 할 수 있는 모듈Duration : 파티클 시스템이 실행되는 지속 시간설명: Duration은 파티클 시스템이 재생되는 총 시간을 의미합니다. 쉽게 말해, 이 파티클 시스템이 한번 발동했을 때 얼마나 오랫동안 파티클을 생성할 것인지를 결정하는 값입니다.영향: Duration이 끝난 후에는, 설정에 따라 파티클 시스템이 종료되거나 재생을 반복할 수 있습니다 (Looping 옵션이 켜져 있는 경우).적용 대상: 파티클 시스템 전체에 영향을 미칩니다.차이점: Duration은 시스템이 파티클을 생성하는 기간을 의미하며, 이 동안에 Emission..

Unity&C#/Unity 2024.11.11

[Unity] TextMeshPro AtlasRenderMode

Unity의 TextMeshPro에서 AtlasRenderMode는 폰트 아틀라스(texture atlas)를 생성할 때 글리프(glyph)를 렌더링하는 방식을 결정하는 설정.글리프(glyph)는 문자(character)의 시각적 형태를 의미. 즉, 글자, 숫자, 기호 등의 구체적인 모양이나 디자인을 나타내는 개별적인 도형. 폰트(font) 내에서 각 문자는 고유한 글리프로 표현되며, 이러한 글리프들이 모여 우리가 읽는 텍스트를 구성.폰트 아틀라스(Font Atlas) 또는 텍스처 아틀라스(Texture Atlas)는 여러 개의 글리프(glyph)나 이미지를 하나의 큰 텍스처에 모아 놓은 것을 의미.주요 AtlasRenderMode 종류:비트맵(Bitmap):설명: 기본적인 래스터화된 이미지로 글리프를 ..

Unity&C#/Unity 2024.11.09

[Unity] 디버그 모드와 SerializeField

한줄 요약 : 아무 곳에나 [SerialzeField]와 [Serialzable]을 붙이면 안되며, 편하게 디버깅하려 하면 안된다.문제 상황 코드Inventory (class)InventoryItem[] (field)InventoryItem ClassItemDataintItemData Classstring 및 int로 이루어진 필드ItemData클레스에 [Serialzable]Inventory클래스에도 [Seriazable]을 붙여 둔 상황.(별 이유 없이 붙임. 그냥 붙임. 문제 상황디버그 모드에서는 Inventory의 InventoryItem 배열이 전부 기본값으로 0이 들어가서 초기화 되어 있음노말모드에서 보기위해 Inventory 의 InventoryItem[]에 [SerialzeField] 를 ..

Unity&C#/Unity 2024.11.01

[Unity] Rigidbody ForceMode

Unity의 AddForce 함수에서 사용하는 ForceMode는 오브젝트에 힘을 가하는 방식과 효과를 조절할 수 있는 옵션1. ForceMode.Force지속적인 힘을 가하는 방식. 프레임마다 일정한 크기의 힘이 적용되어 물체의 질량을 고려해 가속도가 증가.Newton의 두 번째 운동 법칙 F = ma를 사용하여 힘을 계산하므로, 질량이 큰 오브젝트는 더 천천히 가속.용도: 중력이나 지속적으로 작용하는 바람 등, 꾸준히 적용되는 힘을 표현할 때 적합.rigidbody.AddForce(direction * power, ForceMode.Force);2. ForceMode.Acceleration가속도를 직접 적용하는 방식. Force와 비슷하지만, 질량을 무시하고 가속도만을 추가.가벼운 물체나 무게와 상관..

Unity&C#/Unity 2024.10.29

[Unity] Tag와 Layer의 성능차이

충돌처리 등을 수행하고 충돌된 물체를 검사할 때 tag를 사용하거나 layer를 사용할 수 있다.이때 tag를 사용하는 것과 layer를 사용하는 것의 성능차이가 궁금해졌다.CompareTag()간단한 문자열 비교 연산.유니티 엔진 내부적으로 최적화 되어 있음gameObject.layer==LayerMask.NameToLayer()레이어 값은 정수형 숫자로 저장되어 있어 매우 가벼움결론별차이 없다..아주 조오금 layer비교가 빠를 수 있다.

Unity&C#/Unity 2024.10.28

[Unity] Monobehaviour를 상속받지 않은 클래스에서 Coroutine 실행하기

몇 초뒤 실행되는 함수를 구현하려면?Invoke(function, time)time뒤 function을 실행시키는 아주 간단한 방법.하지만 Monobehaviour를 상속받는 클래스에서만 사용할 수 있음.Coroutin몇초마다, 몇초뒤 행동을 수행하는 간단한 방법이 또한 Monobehavour 를 상속받는 클래스에서 코루틴을 시작시킬 수 있음.Task비동기 프로그래밍으로 수행하는 방법유니티의 타이밍이랑 안맞을 수 있음.Task는 사용하기 싫은데.. 몇 초후에 실행되는 함수를 사용하려면..다른 객체에서 StartCoroutine을 시작시키면됨.public class TimeControl : IItemEffect{// 생략 public void Affect() { Time.timeSc..

Unity&C#/Unity 2024.10.20

[Unity] OvelapSphere

내배캠 꾸준별 실습에서 내적을 사용해서 시야각 내의 소행성을 검출해야하는 구현과제가 있었다.근데 콜라이더도 없고, 딱히 레이를 사용하는 것도 아닌 것 같았다.내적은 하겠는데 그래서 콜라이더 없이, ray없이 주변에 오브젝트를 어떻게 검출하는데?Physics.OverlapSphere일정거리내의 콜라이더를 검출해내는 함수public static Collider[] OverlapSphere(Vector3 position, float radious, int layerMask=AllLayers, QueryTriggerInteraction=QueryTriggerInteraction.UseGlobal)메모리를 할당하므로 대신 다른걸 사용하는게 좋다고 doc에 되어있다.Physics.OverlapSphereNonAll..

Unity&C#/Unity 2024.10.17

[Unity] Resources.UnloadAsset()

Resources.UnloadAsset()로드된 에셋을 언로드 하는 메소드이미 인스턴스화된 게임 오브젝트에는 영향을 미치지 않음.public class UIManager{ private Dictionary _cache; // 싱글톤 초기화 public void OpenPopupUI(string path) { if(!_cache.ContainKey(path)) { _cache.add(string,GameManager.Instantiate(Resources.Load($"Prefabs/{path}")); } /*캐쉬에서 object를 꺼내서 intantiate시키는 코드*/ } public void Clear..

Unity&C#/Unity 2024.10.16