개발 STORY 49

AI - NavMesh

NavMesh란?네비게이션 메시의 약자로 게임오브젝트가 자연스럽게 움직일 수 있도록 도와주는 경로 탐색 시스템게임 환경 내에서 이동 가능한 영역을 정의하는 데 사용, 이 시스템은 AI 캐릭터가 목적지까지 효율적으로 이동할 수 있도록 경로를 계산하고, 장애물을 피하는 데 필요한 정보를 설정해줄 수 있다. NavMesh Surface: 게임 오브젝트에 적용하여 네비게이션 메시를 생성하는 표면으로 이를 통해 이동 가능한 영역을 정의 할 수 있다 - Bake : NavMesh를 생성하는 과정, 게임 오브젝트의 이동 가능한 영역을 정의하고, AI 캐릭터가 경로를 탐색할 수 있도록 필요한 정보를 담은 NavMesh를 만드는 것  NavMesh Agent: AI 캐릭터에 부착하여 경로를 따라 움직이도록 하는 컴포넌트..

Unity 2024.11.04

UI - Canvas

캔버스(Canvas) 모든 UI 요소는 Canvas 안에 위치한다. 캔버스는 Canvas 컴포넌트가 있는 게임 오브젝트이며모든 UI 요소는 반드시 어떤 캔버스의 자식이어야 한다. UI요소 생성시, 예를 들어 UI메뉴의 Image를 사용하여 이미지를 생성했을 때Sence에 아직 캔버스가 없다면  자동으로 캔버스를 생성하고생성한 UI요소는 이 캔버스의 자식으로 생성이 된다.  Event System이라는 게임오브젝트도 같이 생성되는데UI와 사용자간의 상호작용을 관리한다.(터치, 클릭 등) 캔버스 - Render Mode Screen Space - Overlay렌더 모드에서는 UI 요소가 화면에서 씬의 위에 렌더링 되며,스크린의 크기가 조절되거나 해상도가 변경되면 캔버스는 여기에 맞춰 자동으로 크기를 변경한다..

Unity 2024.10.18

Texture

텍스처(Texture)3D 모델의 표면에 적용되는 2D 이미지로, 물체의 색상, 세부 사항, 패턴 등을 추가하여풍부한 그래픽으로 보완해주는 역할을 가진다. 이미지 데이터 : 픽셀로 구성된 2D 이미지로, 색상 정보를 포함 함 UV : 3D 모델의 표면에 2D 텍스처를 매핑하는 데 사용되는 좌표 체계, U와 V는 텍스처의 수평과 수직 방향을 나타내며, 각각의 축이 0에서 1 사이의 값을 가진다.UV 좌표는 텍스처와 3D 모델 간의 연결고리 역할을 함※ U: 텍스처의 수평 위치 (0 = 왼쪽, 1 = 오른쪽)    V: 텍스처의 수직 위치 (0 = 아래, 1 = 위) 예를 들어, (0, 0)은 텍스처의 왼쪽 아래 모서리를, (1, 1)은 오른쪽 위 모서리를 나타낸다. - UV매핑 : 3D 모델의 각 정점에 ..

Unity 2024.10.07

Lerp(선형 보간)

우리는 이렇게 시작 지점과 끝 지점을 알면그 중간의 지점들을 대략적으로 알 수 있습니다. 정확하게 알기 위해서는 70%의 위치를 알려면 최대치에서 0.7을 곱하면 되고 50%의 위치를 알려면 최대치에서 0.5를 곱하면 됩니다(혹은 나누기 2) 그런데이런 경우라면 중간 위치를 어떻게 알 수 있을까요?((27-3)*0.5)+3이런 계산식을 통해 우리는 중간의 위치를 알 수 있습니다. 이렇게양 끝의 위치를 알고 있을때 그 사이의 원하는 위치를 알아내는 것을 Lerp(선형 보간)이라고 합니다이렇게 두개의 object를 준비해준뒤 스크립트를 최상위 부모에 컴포넌트 합니다.using UnityEngine;public class LerpExample1 : MonoBehaviour{ [SerializeField]..

Unity 2024.10.01

Coroutine(코루틴)

Coroutine 유니티에서 비동기적인 작업을 처리 할 때 사용하는 메서드 입니다가장 큰 특징으로는 일반적인 함수와 다르게 코루틴은 실행중이던 함수를 잠시 중지했다가 나중에 원할 때 다시 시작 할 수 있습니다.시간 지연이 필요한 작업들에 아주 유용하게 쓰입니다 public class CoroutineExample : MonoBehaviour{ private Coroutine aCoroutine = null; //코루틴 변수 선언 private WaitForSeconds wait1Sec = new WaitForSeconds(1f); //WaitForSeconds는 IEnumerator를 상속받아서 만들어진 클래스이다. //1.Coroutine 동작 조건 : MonoBehaviour필수, g..

Unity 2024.09.30

Breakout(벽돌깨기) - (1)

어릴적부터 해왔고 지금도 비슷한 형식의 게임들이 나오고 있다.요즘은 어떤 게임의 미니게임들로 여러가지 버전으로 나와서 플레이의 신선함을 주는 정도로 활용 되는 게임이다출시 당시와는 다르게 지금은 여러 아이템이나 기능들을 활용하고 있기도 하다 기본적인 게임형식으로는 아래 패널을 조작해 필드의 공을 쳐서 위의 벽돌 오브젝트들을 파괴하고 점수를 쌓는 형태를 지니고 있다 공부하는 관점으로는 시시각각 변하는 공의 벡터로 인해 학습용도로 괜찮은 게임이라고 할 수 있겠다 준비하기우선 공이 벽과 패널에 닿을 시 튀게 하는 것이 목표이다공에는 양 옆의 벽에 닿았을 때는 x좌표값을 음수로 바꿔 방향을 전환하고패널이나 윗 벽에 닿았을 때 y좌표값을 음수로 바꿔 방향을 전환 해야 한다. using UnityEngine;pub..

Unity/프로젝트 2024.09.25

Prefab

유니티에는 Prefab 라고 부르는게 있다언리얼에서는 Blueprint 라고 부른다고 한다. Prefab은 게임 오브젝트의 재사용성을 위해 생겨난 개념이다 우리가 하는 게임에는 참 많은 것들이 존재하는데 그중에는 돌, 나무 등 무수히 많은 오브젝트도 있다 만약에 내가 만든 게임에 1만 그루의 나무가 있는데 크리스마스를 맞이해서 이벤트로 이 나무에 크리스마스 장식을 하라는 지시가 내려왔다. 1만여개의 오브젝트의 이미지를 변경하라....? 그날로 퇴근은 없는 것 이다. 무식하게 이 1만 그루의 나무를 모두 오브젝트를 다 때려 박아서 만든다면.. 만들때도 힘들고 변경할때는 더 힘들게 되는 것이다 그럼 어떻게 해야하느냐? 이 1만 그루의 오브젝트가 만약 하나의 오브젝트를 재사용해서 만든 것이고 그 원본인 오브젝..

Unity 2024.09.24

Collision(충돌)

Collision은 일반적으로 두 개체가 충돌하는 상황을 말한다.유니티에서는 Collision이라는 클래스가 있으며 두개의 게임 오브젝트가 충돌 했을 때 이 충돌의 이벤트 처리를 처리하는 클래스이다.충돌에 대한 기준을 만들기 위해서Collider라는 컴포넌트를 추가해야한다.Collider는 Box, Sphere, Capsule 등 여러 형태로 구성되어 있다오브젝트의 형태와는 상관 없이 Collider를 만들 수 있고이런형태로 만들게되면 실제로 충돌되는 범위가 Box형태가 된다Collider는 충돌의 경계를 설정하는, 감지를 위한 컴포넌트라고 이해하면 된다. 또한 유니티에서는 충돌 상황에서 두가지의 처리방법이 존재하는데Trigger와 Collision 로 나뉜다 Trigger는이 옵션에 체크가 되어 있어야..

Unity 2024.09.23

Transform(2) - position

지난 글에서 세계 좌표계와 로컬 좌표계에 대해 설명했는데 한번 유니티에서 어떻게 차이가 나는지를 살펴본다. public class test : MonoBehaviour{ private Transform tr = null; [SerializeField] private float moveSpeed = 10f; private void Awake() { tr = transform; }}다음과 같이 test.cs 에 tr 변수를 초기화 시켜 주고 private void Update(){ if (Input.GetKey(KeyCode.W)) { tr.position = tr.position + (Vector3.forward * moveSpeed * ..

Unity 2024.09.20