[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을 다운받아주자! 다운 받으면 해당 화면이 뜬다 버튼을 이것저..
[C#] 리스너 패턴을 알아보자 근데 유니티를 곁들인.(이벤트 함수를 사용하는 대표적인 패턴! )
·
DesignPattern
보통 wasd같이 키입력을 받는것을 Update()문에 두는 것은 비추다. wasd 뿐만 아니라 공용으로 사용할 수 있는 입력을 총괄하는 InputManager를 사용하는 것을 권장한다! 1. 입력이 굉장히 많으면 Update문에서 매번 수많은 입력을 검사해야하기 때문에 별로다.2. 입력을 따로 관리하면 유지보수에 용이하다. using System.Collections;using System.Collections.Generic;using UnityEngine;using System;public class InputManager{ public Action KeyAction = null; public void OnUpdate() { if (Input.anyKey == false)..
[Design Pattern] State Pattern, 유니티 애니매이션에 자주 쓰이는 state 디자인 패턴에 대해서 알아보자!
·
DesignPattern
유니티에서 뛰기 점프하기 장전하기 쏘기 등등 상황에 걸맞는 멋있는 애니매이션을 쓰고자 노력을 하다보면 상황을 제한해야하기도, 추가해야하기도 한다. 그럴땐 보통 드는 생각은 bool값을 설정하여 if else문에 && || 로 조건을 걸어 해당 애니매이션을 재생하곤 한다.bool isFalling;bool isJumping;bool isSkillCasting;bool isSkillChanneling;if(isJumping){}else{ if(isSkillChanneling && isFalling) { } else { if(isSkillCasting) { } }} 위와 같이 상황이 적으면 괜찮겠지만 와우 캐릭터 하나만 해도 여러가지 감정표..
[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 키워드를 사용해 특정 조건이 만족될 때까지 대기하거나, 다음 프레임에서 다시 실행되도록 설정할 수 있습니다.코루틴의 가장 큰 장점은 프레임의 흐름을 멈추지 않으면서도 반복적으로 실행 가능한 작업을 수행할 수 있다는 것입니다. ..