개발 57

컴퓨터 구조 - ISA

ISA ISA는 Instruction Set Achitecture의 줄임이란 걸 밝히고 시작한다. 위 그림은 CPU의 종류중 하나인 MIPS의 ISA 예시이다. 솔직히 봐도 무슨 내용인지 정확히는 모르겠지만, Comments 부분을 주목해 읽어보니 Arithmetic(산술연산) 포맷, Transfer, Branch, Jump 등등이 눈에 띈다. 만약 C언어에서 덧셈을 하는 코드를 짰다면, 우선 그것이 어셈블리어의 add 명령어로 변환이 된다. 이때 add명령어는 산술연산(Arithmetic)에 해당하므로, 위 그림에서 R-format에 해당하는 Intruction이 관계될 것으로 추측할 수 있다. 시간측정 일반적으로 CPU 퍼포먼스를 측정할 때, 우리는 실행 시간을 기준으로 그것을 측정하게 된다. 또한 ..

FLT_MIN의 언더플로우, 왜 이미 최솟값인데도 계속 나누기가 가능할까?

C언어 과외 도중 실수 언더플로우에 대한 질문이 들어왔다. 질문을 살펴보기 전에, 혹시라도 이 글을 읽는 누군가를 위해 언더플로우에 대한 개념부터 먼저 간단히 정리하고 들어가려 한다. 언더플로우란, 메모리가 표현할 수 있는 범위보다 작은 수를 저장할 때 생기는 문제이다. 언더플로우는 두 가지 종류가 있는데, 바로 '정수 언더플로우'와 '실수 언더플로우'이다. 1) 정수 언더플로우 : 지정된 자료형의 범위보다 적은 숫자를 연산하려 할때 발생 ex) char형 변수의 표현범위는 (-128~127) 인데, -128에서 -1만큼 더 감소시키면 -129가 아닌 127이 된다. 2) 실수 언더플로우 : 실수를 아주 큰 수로 나누었을 때, 즉 0에 한없이 가까워질 정도로 아주 작은 수가 되었을 때 발생 ex) FLT..

[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] 정해진 시간에 비례해서 이동하기

public IEnumerator MoveToPosition(Transform transform, Vector3 position, float timeToMove) { var currentPos = transform.position; var t = 0f; while (t < 1) { t += Time.deltaTime / timeToMove; transform.position = Vector3.Lerp(currentPos, position, t); yield return null; } } 현재 위치, 목표 위치, 이동 시간을 매개변수로 전달받으면 Lerp 보간을 적용받아 부드럽게 움직이는 함수이다. 출처 Move Transform to Target in X seconds - Unity Answers ans..

[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

[게임개발] 디자이너 없는 팀에서 살아남기

게임잼, 해커톤의 묘미는 모르는 사람들끼리 팀을 맺는 '팀빌딩' 과정에 있다. 그런데 이 팀빌딩 과정은 대체로 랜덤으로 진행되거나 시간 제한을 짧게 두기 마련이라 '팀운' 이라는 요소가 크게 작용한다. 이번 포스팅에서는 가장 흔하게 팀운이 망한 경우로, "디자이너가 팀에 없어요" 상황의 대처법을 다뤄보고자 한다. 1단계. 주최 측에 문의하기 우리팀이 디자이너를 못 찾고 있는 동안 어딘가의 디자이너도 합류할 팀을 못 찾고 있는 상황일 수 있다. 이런 경우 주최 측에서 적절히 디자이너와의 팀빌딩을 성사해주기도 하는데, 운이 좋다면 디자이너 매칭에 성공할 수도 있다. 보통은 '먼저 문의한 팀' 위주로 받아주니 재빨리 마지막 기회를 노리도록 하자. 2단계. 디자인도 가능한 개발자 찾기 1단계에서 디자이너 구인에..

[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