코린이 부트캠프 일상 48

유니티 타일맵 오류 해결하기

지금 만들고 있는 게임에서 타일맵을 플레이어가 부수거나 설치할 수 있게 해주는 시스템을 만들었는데 오류가 생겨서 오류에 대해 정리하려고 한다. 일정 방향에서 벽을 공격했을 때 벽에 대한 정보를 가지고 올 수 없는 오류 일정 방향에서 벽을 공격 했을 때 벽에 대한 정보를 가지고 올 수 없는 오류인데 public void Start() { // Bounds는 구조체 // 해당 Tile의 크기만큼 싹 for문을 돌린다. tile이 있으면 Dictionary에 추가. 각각 TileInfo의 값을 받는다. BoundsInt bounds = tilemap.cellBounds; for (int x = bounds.x; x < bounds.x + bounds.size.x; x++) { for (int y = bound..

유니티 Rule Tile

타일맵을 설치할 때 한 타일에 여러타일의 규칙성을 부여해서 설치방향과 순서에 따라 자동적으로 타일이 선택되게 하는 방법이다. 한 종류의 타일 설치하고 주위로 같은 타일을 설치하하면 설정된 룰 타일에 따라 모양이 자동으로 결정된다. 룰타일 파일을 생성 후 원하는 규칙을 지정해주면 해당 타일을 설치 규칙이 완성되어 한가지 타일만 설치하더라도 알아서 규칙이 생성된다.

유니티 2D 시야각(FOV) 만들기

지금 만들고 있는 게임에서 던전 탐험 느낌을 주기 위해 시야각(FOV_FieldOfVeiw)을 만들어 한층 더 게임의 분위기를 살리려는 노력을 했다. 플레이어 자식으로 가상의 mesh를 만들어 레이캐스트로 충돌 여부를 판단하고 시야각을 만들어 주었다. 시야각이 벽과 만났을 때는 시야각과 레이가 충돌했을 때의 크기 만큼 리턴해주고 시야각 안에 설정해 둔 레이어가 들어왔을때 화면에 랜더링 해주는 것을 추가해 몬스터가 시야각 안에 있어야지 볼 수 있게 해주었다. 또한 벽 넘어에 어떤 물체가 있는 지 모르기 때문에 탐험에 대한 긴장감을 느낄 수 있을 것 같다. [RequireComponent(typeof(MeshFilter))] [RequireComponent(typeof(MeshRenderer))] publi..

유니티 애니메이션 blending

만들고 있는 게임이 2D TopDown 방식인데, 위,아래,오른쪽,왼쪽 애니메이션이 필요하다. 그래서 최대한 애니메이션을 만들었더니..... 팀원들이 무슨 마법진 같다고 했다. 찾아보니 애니메이션 레이어를 설정해서 간단하게 만들 수 있다고 정보를 얻어 해당 방법으로 작업을 했다. Idle과 Move Attack을 해당 모습처럼 생성을 해줬더니 다른 행동으로 하고 idle 상태로 돌아왔을 때 DOWN 모션이 무조건 나와서 버그처럼 보이게 되었다. 그래서 다른 방법을 모색했더니 Animation Blending을 찾았다. Move는 파라미터 Bool 값을 줘서 이동거리 Vector가 0 이상일 때 true로 만들어 주었꼬 Attack은 마우스 왼쪽 클릭 시 trigger 파라미터를 줘서 실행 해주었다. 각각..

유니티 2D 프로젝트에서 light(조명효과)

2D 프로젝트 URP에서는 2D Light가 지원 되지만 그냥 2D 프로젝트에서는 지원되지 않는다. 따라서 패키지 매니저를 통해 추가 다운로드를 받아서 해당 기능을 실행할 수 있게 된다. Universal RP를 다운 Asset 폴더에서 우클릭 Create Renderer URP Renderer(with 2D Renderer) 를 만들어 준다. Edit > Project Settings > Graphics에 다운 받은 Universal Render Pipeline Asset 넣어준다. 하이라키창에 우클릭 Light에 가면 2D light가 생성된다.

유니티 struct 와 class

struct와 class는 둘 다 데이터를 캡슐화하고 새로운 데이터 유형을 정의하는 데 사용된다. 하지만 둘의 차이점이 존재한다 struct 값형식으로 스택에 할당 / 복사될 때 값 자체가 복사되므로 하나의 struct 인스턴스를 다른 인스턴스로 복사할 떄 데이터가 복사된다. 다른 구조체나 클래스를 상속할 수 없으며 인터페이스만 구현할 수 있다. 파라미터가 없는 생성자를 가질 수 없으며, 구조체를 인스턴스할 때 모든 맴버 변수를 초기화 시켜줘야 한다. class 참조형식(Null 참조 가능)으로 힙에 할당 / 참조가 복사되므로 두 개의 변수가 동일한 데이터를 참조할 수 있다. 다른 클래스나 인터페이스를 상속할 수 있고 다른 클래스에 기반을 둘 수 있다. 파라미터가 없는 생성자를 가질 수 있으며, 맴버 변..

C# Tuple(튜플)

C#에서 튜플은 서로 다른 데이터 형식의 여러 개의 값을 담을 수 있는 데이터 구조입니다. 튜플은 C#7.0부터 도입되었고, 여러 값을 그룹화하고 반환하는데 유용하게 쓰입니다. 1. 기본적인 튜플 선언 var TestTuple = (1, "Player", 40); TestTuple 이라는 튜플이 생성되며, 각 요소에는 순서대로 1, Player, 40이 들어갑니다. 각 요소의 기본적인 이름은 Item1, Item2, Item3 으로 자동 부여 됩니다. 2. 명명된 튜플 선언(각 요소에 이름 부여) (int speed, string Object, Float attack) TestTuple = (1, Player, 40.5); 이렇게 선언해주면 Item 대신에 TestTuple.speed / TestTupl..

유니티 게임 기획 / 나만의 기획

지금까지와는 다른 2달이라는 기간동안 4인으로 협업하여 게임을 만들어야 하는 프로젝트를 시작하게 되었다. 초반부터 너무 막막하고 어떻게 시작하면 좋을 지를 모르겠어서 정말 많이 헤맸고 지금도 헤매고 있는 중이다. 그리도 팀원들과 오랜 대화와 튜터님의 조언으로 어느정도 감을 잡고 진행하고 있고 그 진행 방향을 소개할려고 한다. 1. 게임 기획 초기 단계 여기서는 어떤 게임류의 게임을 만들고 싶은지 정하는 단계이다. 너무 세세하게 말고 크게 어떤 게임을 만들 것이다. 라는 컨셉을 잡아가는 것이 중요하다. 예를 들어 우리 팀같은 경우는 2D 어드벤처(샌드박스형) 게임을 만들고 싶어해서 관련된 게임을 찾아 그 게임들의 특징(공통점, 차이점을 파악) 정리했다. 2. 게임 컨셉과 세부 기능 단계 이 단계에서는 게임..

유니티 제너릭 싱글톤 패턴(Generic Singleton) 및 Scene 관리

게임 매니저만 싱글톤 패턴을 이용해서 게임매니저가 필요한 모든 매니저의 정보를 갖고 게임매니저에서 정보를 불러오는 방식으로 구현을 해왔다. 이렇게 구현하게 되면 public의 사용이 많아진다는 단점이 있다고 생각해서 이번에 모든 매니저급 cs를 전부 싱글톤을 만들어 사용할려고 한다. 이에 따라 유지 보수성이 좋게 제너릭 싱글톤을 사용해 보려고 한다. using System.Collections; using System.Collections.Generic; using UnityEngine; //재너릭 싱글톤 모든 매니저들이 상속 받을 수 있게 선언 public class Singleton : MonoBehaviour where T : MonoBehaviour { private static T instanc..