개발/Unity 11

Unity Tilemap 타일끼리 겹치는 레이어 문제 해결

상자가 제대로 보이지 않고, 벽이랑 겹쳐 보이는 문제가 발생했다. 가장 떠올리기 쉬운 방법은 타일맵을 또 하나 더 만들어서 Order In Layer 값을 수정해주는 것이겠지만... 고작 박스 하나 안겹치게 한다고 타일맵까지 분리하는건 너무나도 비효율적이다. 유니티 세팅만 만지면 해결될 문제일 것 같아서 열심히 구글링을 해봤다. 1. 프로젝트 세팅 편집 프로젝트 세팅 - Graphics 탭으로 가서 Camera Settings을 변경해주어야 한다. Sort Mode를 Default에서 Custom Axis로 바꾼 후, XYZ 값을 (0, 1, 0) 으로 바꿔준다. 타일맵 상에서 Y값이 더 위에 있는 타일부터 '먼저 렌더링'하게 해주기 위해서이다. 아까같은 경우를 보면, 벽이 박스보다 더 높은 Y위치에 있..

개발/Unity 2023.05.23

[Unity] 버튼 영역 모양 바꾸기 (세모, 사다리꼴, 그 어떤 모양도 가능)

유니티를 사용하다보면 모양이 있는 버튼을 만들어야 할 때가 생긴다. 위 사진의 경우 직사각형 모양으로 된 버튼들이 서로 겹쳐있어서 클릭이 되지 않는 경우가 발생한다. 버튼을 이미지 영역에 맞게 맞추는 방법에 대해 다루고자 한다. 1. 새로운 C# 스크립트를 만들고 아래 내용을 복붙한다. using UnityEngine; using System.Collections; using UnityEngine.UI; public class AlphaBtn : MonoBehaviour { public float AlphaThreshold = 0.1f; void Start() { this.GetComponent().alphaHitTestMinimumThreshold = AlphaThreshold; } } 스크립트 이름은..

개발/Unity 2021.01.05

[Unity] 클래스에서 get, set 접근자를 사용해 enum형 변수를 가져오기

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; public class WorldTile { public Vector3Int LocalPlace { get; set; } public Vector3 WorldLocation { get; set; } public TileBase TileBase { get; set; } public Tilemap TilemapMember { get; set; } public string Name { get; set; } public bool IsExplored { get; set; } public WorldTile ExploredFro..

개발/Unity 2020.08.31

[Unity] 유니티 프로젝트 중간에 2D, 3D 전환하기

유니티 프로젝트를 처음에 생성하면 2D, 3D 모드를 설정할 수 있다. 그런데 실수로 다른 템플릿을 설정한 경우에 어떻게 모드를 변경할 수 있는지 알아보겠다. 1) 프로젝트 세팅 변경 우선 Edit -> Project Settings 에 들어가주도록 한다. (사진은 2D->3D로 전환하려고 하고 있지만, 3D->2D라도 상관없다) Editor 탭에서 Mode를 바꿔줄 수 있다. 여기서 원하는 모드를 선택하자. 2) 새로운 씬 생성 새로운 씬을 만들면 아까 전의 설정이 반영된다. 원래의 씬은 삭제해도 된다.

개발/Unity 2020.07.21

[Unity] 아이소메트릭 타일맵 공부 - (2) 레이어 따라 배치하기

이전 강좌에서는 타일 팔레트에서 평면적인 타일을 배치하는 방법을 배웠다. 이번 강좌에서는 입체적인 타일을 배치하는 방법을 다뤄보고자 한다. 지난번 강좌에 이어서 진행한다. 우선 가장 바닥이 될 타일을 10x10 크기로 배치해주었다. 그런데 이제 이 위에 2층, 3층의 타일을 얹고 싶다고 하자. 단순히 큐브 타일을 드래그하는 것만으로는 제대로 배치가 되지 않을 것이다. 2층, 3층을 제대로 표현하기 위해서는 층에 따라 타일이 배치될 높이를 설정해주어야 한다. 기존 타일을 복사해서 각각 1st, 2nd, 3rd 세 개의 타일 오브젝트를 새로 만들어주었다. 이 세 개의 오브젝트는 Tile Anchor 값을 각각 다르게 설정해줌으로써 높이를 달리하게 할 것이다. '어떻게 높이를 달리할 것이냐'고 묻는다면, Z ..

개발/Unity 2020.07.20

[Unity] 아이소메트릭 타일맵 공부 - (1) 타일 팔레트 설정하기

아이소메트릭 뷰를 간단히 설명하자면, 2D와 3D 사이의 그 어딘가. 즉 2.5D 정도로 생각할 수 있겠다. 입체적인 느낌은 살리면서도, 피로감 없이 한눈에 게임을 파악할 수 있어 시뮬레이션 게임에 자주 이용된다. 이번 포스팅에서는 유니티를 이용해 기본적인 타일맵 세팅을 하는 방법에 대해 배워보겠다. 우선 유니티 프로젝트를 만들어주도록 하자. 템플릿은 2D로 설정한다. (만약 2D가 아니라 3D로 설정했다면 이후에 엔진 설정에서 바꿔주도록 하자) 우선 제일 먼저 Tilemap 오브젝트를 추가한다. 사각형(Tilemap), 육각형(Hexagonal), 등각 투상도(Isometric) 등 여러 종류의 타일맵이 있는데, 여기에서 아이소메트릭 타일맵을 선택해주도록 한다. 제대로 추가했다면 씬에 위와 같은 격자가..

개발/Unity 2020.07.13

[Unity] 공공데이터 API (REST) 연동하는 방법 - (2)

1편에 이어 글을 계속 이어나간다. 지난번 포스팅에서는 공공데이터포털에 가입해 승인신청을 받는 과정까지를 다루었다. 승인신청이 정상적으로 완료되었다면 다음과 같은 화면을 볼 수 있을 것이다. (공공데이터포털-마이페이지-활용중인 서비스 클릭) 위 화면에서 눈여겨볼 부분은 인증키, 데이터포맷, 참고문서 이다. 우선 포스팅을 읽는 사람들마다 불러오려는 데이터가 조금씩 다를 수 있기 때문에, 각자의 서비스 정보에 포함된 참고문서를 정독하는 것을 권장한다. 1. 참고문서에서 내가 불러오려는 데이터를 확인하기 우선 참고문서를 열어 목차를 훑어본다. 내가 불러오려는 데이터가 정확히 어떤것인지 확인하기 위해서이다. 예를들어, 날씨를 다루는 API가 있더라도 그안에 '측정소별 강수량', '월간 평균 강수량' 등 다양한 ..

개발/Unity 2020.07.01

[Unity] 공공데이터 API (REST) 연동하는 방법 - (1)

다른 블로그에는 제대로 설명이 나와있지 않아 직접 글을 쓰게 되었다. 간혹 게임기획 도중 현실의 데이터셋을 필요로 하는 경우가 있을 수 있다. 날씨정보에 따라 현실에서 비가 내린다면 게임에서도 비가 내리게 하는 연출, 미세먼지 수준에 따라 게임 리소스의 색감을 바꾸는 연출, 등등.. 현실의 요소를 활용해 더욱 몰입감있고 흥미로운 게임을 제작하고 싶다면 집중해봐도 좋을 것 같다. 이번 포스팅에서는 데이터셋 API를 유니티에 불러와 다루는 방법을 살펴보려 한다. https://www.data.go.kr/index.do 공공데이터 포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공..

개발/Unity 2020.06.28

게임 사운드 사이트 정리

1. 프리사운드 (Freesound) #무료 #무난 https://freesound.org/ Freesound - Freesound April 29th, 2020 ilaria [Guest Blog post by Ilaria Sartori and Gianni Ginesi] Dear fellow Freesounders, May we introduce Barcelona Confinement Soundscape, a collaborative soundmap and soundscape-related network of researchers, artists and neighbors who s freesound.org [장점] 무료다 사운드 종류가 풍부한 편이다 사이트 기능은 갖출건 다 갖추었다 [단점] 로그인을 해..

개발/Unity 2020.06.26

[유니티 궁금증] transform.position과 rigidbody.position 의 차이

오브젝트의 위치를 변경하고 싶을때 position 값을 바꾸게 된다. 그런데 rigidbody가 적용된 오브젝트를 움직일 때 궁금증이 생겼다. transform.position과 rigidbody.position를 각각 수정해보았더니 두 값 모두 오브젝트를 이동시켰다. 그런데 특정 상황에서는 이동에 따른 결과가 다르게 나오기도 했다. 두 포지션값은 서로 차이가 없는걸까. 결론부터 말하자면 퍼포먼스와 이동되는 시점의 차이에 달려있다. transform.position 을 사용할 경우 오브젝트의 위치가 즉시 순간이동된다. 순간이동됨과 동시에 연결된 모든 콜라이더들이 리지드바디의 위치를 다시 계산하게 된다. 퍼포먼스가 저하된다 rigidbody.position 을 사용할 경우 '다음 물리 시뮬레이션 단계' 이..

개발/Unity 2020.06.24