[Unity] 가중치 기반 몬스터 스폰 디자인 하기!
·
Unity
몬스터를 소환하는 기준을 이것저것 알아보다가 너무 좋은 방법인 것 같아서 메모해두고자 한다! 내가 원하는 스폰 기준은, 챕터가 지날수록 새로운 몬스터는 나오되, 그 몬스터는 쎈 몬스터여서 너무 많이 나오면 안된다. 즉 4챕터라고 치면, 하급몬스터(40%) - 중급 몬스터(30%) - 상급 몬스터(20%) - 최상급 몬스터(10%)를 느낌으로 새로운 몬스터 해금은 되지만 기존 몬스터가 더 많아야한다! 이를 해결하기 위해 내가 쓴 방법은 가중치를 기반으로 몬스터 id를 선택하는 것이었다! // 가중치 기반 몬스터 선택 private int GetMonsterID() { List weights = new List(); for (int i = 0; i 로직을 설명해보겠다.1. 가중치 ..
함수 실행 전 애니매이션을 넣고 싶을때 Animation clip을 이용해서 죽기전 혹은 스킬 시전 모션을 이쁘게 꾸며보자!!
·
Unity
앞으로 쓸 내용은.... 해당 방법을 2시간째 못찾다가 어이없이 찾자, 굉장히 짜증나는 상황에서.... 다음엔 이런 실수 하지말기 위해... 적어봅니다..... 하 늬들은 이런거 피지마라...비흡연자이지만 이런 느낌과 함께... 가봅시다! 보통 몹들을 죽었을 때 Destroy()로 완전 없애버리지 않고 오브젝트 풀링으로 비활성화 시켜서 관리할 것이다! 그래서 그냥 비활성화 시키면 너무 게임의 재미 요소가 사라지니 이렇게 죽는 모션을 1초정도 보여주고 비활성화 시키면 적을 처치했다! 라는 느낌을 게임적으로 줄 수 있을것이다! 즉 SetActive(false) 함수 발생 이전에 애니매이션을 실행시키면 더 좋다는 뜻이다!! 이런 느낌으로 마법 발사~ 같은 FireBall() 함수 이전에도 시전 애니매이..
[Unity] InputSystem으로 플레이어를 mz하게 이동시키자!
·
Unity
여태까지 플레이어를 wasd로 움직였일 때는 Edit -> Project Settings -> Input Manager -> Axes 에 있는 내용대로 inputVec.x = Input.GetAxisRaw("Horizontal");inputVec.y = Input.GetAxisRaw("Vertical"); 이런식으로 받아와서 속도와 시간을 곱해줘서 이동시키곤 했다..!!!! 하지만!! 이건 구식 방법이다! 특히 싱글플레이에선 Input System을 이용하면 이동을 굉장히 쉽게 구현할 수 있다.! 화면 상단의 Window -> Package Manager 에 가서 Pakages를 Uinity Registry 로 설정해서 Input System을 다운받아주자! 다운 받으면 해당 화면이 뜬다 버튼을 이것저..
[Unity] 우리가 보는 2D 스크린, 그런데 왜 게임 화면은 3D처럼 원근감 있게 보일까?
·
Unity
우리가 게임을 즐길 때, 사실 그 화면은 2D 스크린을 통해 보여지지만, 마치 3D 공간을 보고 있는 듯한 입체감과 원근감을 느낍니다. 유니티 같은 게임 엔진에서는 이러한 3D 효과를 사실적으로 구현하기 위해 원근 투영을 사용합니다. 이번 글에서는 왜 2D 스크린에서 3D의 원근감이 느껴지는지, 그리고 그 원리가 물리와 어떻게 연결되어 있는지 깊게 알아보겠습니다.1. 원근 투영(Perspective Projection)과 우리의 시각유니티에서 원근감을 구현하는 주요 기술은 바로 **원근 투영(Perspective Projection)**입니다. 현실에서는 가까운 물체가 더 크게 보이고, 멀리 있는 물체는 더 작게 보이죠. 이는 우리 눈이 물체의 거리와 크기를 다르게 인식하기 때문입니다. 유니티의 카메라 ..
[Unity] Layer을 이용해 충돌을 따로 관리하자 (귀찮게 bool값 설정이 불필요해진다!)
·
Unity
Unity Physics Layer 설정으로 충돌 문제 해결하기Unity에서 게임을 개발할 때 오브젝트 간의 충돌은 필수적인 요소입니다. 그러나 개발을 하다 보면 불필요한 충돌로 인해 예기치 않은 문제들이 발생할 수 있습니다. 이런 충돌 문제는 코드에서 개별적으로 해결할 수도 있지만, Unity의 Physics Layer 기능을 사용하면 더욱 간단하고 효율적으로 관리할 수 있습니다. 이번 글에서는 충돌 관련 보편적인 문제와 Physics Layer를 사용해 해결하는 방법에 대해 설명하겠습니다.1. 충돌 문제의 일반적인 예시개발 중 흔히 겪는 충돌 문제 중 하나는 특정 오브젝트가 의도하지 않은 오브젝트와 충돌하거나 상호작용을 하는 경우입니다. 예를 들어, 보스 캐릭터의 특정 공격이나 미사일이 플레이어의 충..
[Unity] 유니티에서 Text를 쓸 때 주의해야할 점! TextMeshPro
·
Unity
TextMeshPro는 Unity에서 고품질의 텍스트 렌더링을 제공하는 강력한 도구입니다. TextMeshPro를 사용하기 위해 필요한 라이브러리 임포트와 컴포넌트 선언 시 주의할 점을 아래와 같이 정리했습니다. 그냥 Text는 이제 레거시이고 이젠 다 TextMeshPro를 import해서 쓰라고 아예 유니티엔진에서 말해줍니다. 1. TextMeshPro 사용 시 필요한 import 문TextMeshPro를 스크립트에서 사용하려면 TMPro 네임스페이스를 import해야 합니다. 이를 위해 코드의 최상단에 다음 코드를 추가합니다:using TMPro;이 구문을 통해 TextMeshPro의 클래스와 메서드에 접근할 수 있습니다.2. TextMeshPro 선언 시 주의할 점TextMeshPro 컴포넌트: ..
[Unity] 3D에서 UI를 만들 때 꼭 알아야하는 필수 컴포넌트 RectTransform!
·
Unity
RectTransform: Unity UI 요소의 핵심 컴포넌트Unity에서 UI 요소를 다룰 때, RectTransform은 매우 중요한 컴포넌트입니다. Transform 컴포넌트의 확장된 버전으로, 2D 공간에서 UI 요소의 위치, 크기, 회전 등을 관리하는 데 사용됩니다. 이번 포스트에서는 RectTransform의 주요 기능과 사용법을 정리하겠습니다.1. RectTransform의 주요 기능포지션(Position)UI 요소의 위치를 설정합니다. 일반 Transform과 비슷하지만, UI 공간 좌표를 기준으로 작동합니다.앵커(Anchor)**** 이걸로 초기값 설정해야 해상도 문제없이 UI가 깔끔해짐UI 요소의 부모와의 상대적인 위치를 지정합니다. 창 크기가 변경될 때 UI 요소의 위치가 자동으로 ..
[Unity] 유니티 코루틴(Coroutine) 깊고 간결하게 정리!
·
Unity
코루틴은 Unity에서 비동기 작업을 처리할 때 유용한 기능입니다. 게임 개발 중 특정 시간 간격을 두고 연속 작업을 처리하거나, 애니메이션, 대기 시간 등을 추가하는 데 자주 사용됩니다. 이번 글에서는 코루틴의 기본 사용법, 중요 함수, 예시를 통해 코루틴의 사용법을 자세히 설명합니다.1. 코루틴이란?Unity에서 코루틴(Coroutine)은 특정 조건이나 시간 동안 코드의 실행을 일시 정지했다가 다시 실행할 수 있는 함수입니다. IEnumerator 타입을 반환하며, yield 키워드를 사용해 특정 조건이 만족될 때까지 대기하거나, 다음 프레임에서 다시 실행되도록 설정할 수 있습니다.코루틴의 가장 큰 장점은 프레임의 흐름을 멈추지 않으면서도 반복적으로 실행 가능한 작업을 수행할 수 있다는 것입니다. ..
[Unity] Scale의 비밀 부모-자식 관계의 스케일 상속은 각 계층에서 곱셈 방식으로 적용
·
Unity
최종 부모 오브젝트의 스케일이 (1, 1, 1)이라도 중간 부모 오브젝트의 스케일이 (3, 3, 3)이면 결과적으로 최종 스케일에 영향을 미칩니다.예를 들어, 아래와 같은 구조를 보겠습니다:최종 부모 오브젝트 : (1, 1, 1)로 설정중간 부모 오브젝트 : (3, 3, 3)로 설정자식 오브젝트 : (1, 1, 1)로 설정이 구조에서 최종 Mesh Object의 스케일은 각 계층의 스케일 값을 곱하여 계산됩니다:(1,1,1)×(3,3,3)×(1,1,1)=(3,3,3)(1, 1, 1) \times (3, 3, 3) \times (1, 1, 1) = (3, 3, 3)(1,1,1)×(3,3,3)×(1,1,1)=(3,3,3)따라서, 최종 부모(Enemy D)의 스케일이 (1, 1, 1)이라도, 중간 부모(Gam..
[Unity] 유니티에서 물리 관련 함수를 FixedUpdate()문에 쓰는 이유
·
Unity
물리 엔진과의 동기화가 필요한 물리적 감지나 판정을 할 때는 FixedUpdate를 사용하는 것이 일반적입니다. Unity에서는 물리 연산이나 충돌 판정을 FixedUpdate에서 실행하는 것이 권장되며, 몇 가지 주요 이유는 다음과 같습니다.1. 물리 엔진과의 동기화Unity의 물리 연산은 FixedUpdate 주기로 실행됩니다. 물리적 판정(Physics.SphereCastAll)을 Update에서 처리할 경우, 프레임마다 호출되어 물리 계산과 타이밍이 어긋날 수 있습니다. FixedUpdate에 두면 물리 엔진의 계산 주기와 맞춰져 보다 안정적인 감지가 이루어집니다.2. 일관된 타이밍 유지Update는 프레임 속도에 따라 실행되지만, FixedUpdate는 일정한 시간 간격으로 실행됩니다. Targ..