Unity/Unity 학습정리(20)
-
Unity - 싱글톤 패턴
주로 사용하는 싱글톤 패턴을 제너릭을 이용해서 구현해보는 시간을 가졌다. 매번 매니저오브젝트와 스크립트를 구현하면서 싱글톤을 사용했는데 사용할 때마다 스크립트에 싱글톤을 구현해주는 방식으로 했다. 그러다보니 여러 싱글톤 객체가 생기기 시작했을때 똑같은 코드가 반복되는 현상도 발생했다. 제너릭으로 구현하게되면 싱글톤을 만드는 것도 간단하고 코드가 반복되지 않는 장점이 있다. 목차제너릭 싱글톤 클래스 생성싱글톤 객체 생성싱글톤 패턴의 장점과 단점마무리 제너릭 싱글톤 클래스 먼저 제너릭에 대해서 알아야 하는데, 제너릭은 동일한 기능을 수행하지만 다른 데이터를 받아서 처리할 때 유용하다. 매번 다른 데이터값에 대한 처리를 하기위해서 여러 메서드나 클래스를 작성하는것은 매우 비효율적이기 때문에 제너릭 타입을..
2024.05.21 -
Unity - Vector2.Dot으로 시야각 구하기
잠입을 해야하는 게임같은 경우 적 AI들이 시야각을 가지고 있다. 그 시야각에 플레이어가 들어가게 된다면 적발이 되고 쫓겨나는 그런 로직이 구현되어있는 경우다. 그럼 이 시야각을 어떻게 구현 할 수 있을까? 이번 챌린지 과제 Rocket 발사 프로젝트에서 로켓이 날아가는 도중, 소행성(Asteroid) 레이어가 시야각에 들어오게 된다면 우주선이 깜빡이는 애니메이션을 통해 경고하는 로직을 구현했다. 목차Mathf.Cos Physics.2D.CircleCastAll()Vector2.Dot마무리 Mathf.CosMathf.Cos(float f) 메서드는 f에 값을 넣어주면 해당값을 Cos값으로 반환해준다 (-1,1)범위 우리가 알고 있는 Degree로 계산한다면 22.5º에 해당하는 코사인 값이 들어가 있을 ..
2024.05.17 -
Unity - 각도 구하기
Unity에서 회전과 관련된 연산을 할 때 두 점 사이의 각도를 알아야 할 순간이 있다. 두 점은 두 개의 벡터로 표현이 가능하고, 두 개의 벡터가 원점에서 출발한다고 생각했을 때 삼각함수를 이용하면 각도를 구할 수 있다. 탄젠트와 아크탄젠트탄젠트는 직각삼각형이 있을때 tanΘ = a/b 로 표현 할 수 있다. 이 말은 각도를 알면 밑변과 높이의 비율을 알 수 있다.tan 45º = 1 와 같이 각도가 45º라면 밑변과 높이의 비가 1:1이라는 얘기이다. 그러면 우리는 벡터의 밑변과 높이 (x,y)만 알게된다면 역으로 각도를 구할 수 있게 된다. 이를 아크탄젠트라고 하는데 유니티에서는 아크탄젠트를 지원해주는 함수 Atan2(float y, float x)가 존재한다.해당 함수는 라디안 (- π, π)..
2024.05.16 -
Unity - LayerMask
LayerMask란 레이어 기반 작업을 단순화 하는 것이다. 32비트 정수로 표시되는 Bit Mask를 이용해 특정 레이어 대상 작업을 할 수 있다. 각 레이어는 0에서 31까지의 인덱스가 할당된다. 주로 비트플래그로, 비트로 각각의 아이템을 상징하거나, 레이어를 구분하는데 사용된다. LayerMask0000 0000 0000 0000 0000 0000 0000 0000 (32bit)로 표현된다.Monster Layer : 0000 0000 0000 0000 0000 0000 1000 0000 8번 레이어Level Layer : 0000 0000 0000 0000 0000 0000 0100 0000 7번 레이어와 같이 표현이 가능하다. 실제로 유니티 에디터에서 Layer를 세팅할 수 있다. 32bit이..
2024.05.09 -
Unity - Coroutine2
저번 포스팅에 이어서 이번에는 코루틴의 특징과 원리에 대해서 공부해 보았다. 목차 코루틴의 특징 코루틴의 원리 WaitForSeconds() 마무리 코루틴의 특징 반드시 IEnuemrator를 반환해야 한다. MonoBehaviour를 상속받는 객체여야한다. 코루틴을 다루는 함수들은 모두 Monobehaviour 클래스안에 작성되어야 한다. 코루틴은 소유권의 개념이 있고, 소유권을 가진 객체가 비활성화되거나 파괴되면 해당 객체가 소유한 모든 코루틴은 중단된다. 코루틴은 메인 스레드에서 실행된다. 여기서 IEnuemartor를 반환해야하는데 코드를 보면 yield return 을 한다. 이것은 C#의 반복기이며 반환 형식은 IEnuemrator로 반환을 하는것입니다. 참고블로그 https://medium...
2024.04.22 -
Unity - Coroutine
게임을 만들다보면 원하는 동작을 시간 간격을 두고 반복 실행을 시키고 싶을 때가 있다. 물론 Update() 함수가 프레임마다 상태를 업데이트해주는 기능을 제공해주지만, 어느 순간에는 반복을 멈추고 싶을때가 있고 다수의 프레임에 분배를 못한다. 예를들어 몇초간격으로 생성되게 하는 오브젝트 혹은 몇초간격으로 데미지를 입는 흔히 도트데미지라고 부르는 동작 등 Update()함수에 작성을 하게 되면 프레임단위로 동작하기 때문에 구현하기 쉽지않다. 그래서 동작을 프레임에 분산시켜 내가 원하는 시간에 해당 함수를 동작시킬수있고 멈출 수도 있게 도움을 주는 것이 Coroutine이다. 목차 Coroutine을 사용하는법과 특징 yield return 마무리 Unity Documents - Coroutine 유니티 ..
2024.04.19