728x90

TIL(Today I Learned) 54

[Unity] TextMeshPro 사용하기 등 - TIL#32

오늘의 오류 상황 1. TMP - Input Field에서 값이 안 가져와지는 현상 문제 상황: TextMeshPro - Input Field를 이용해서 입력받은 값을 Int로 형변환을 하는게 목적이었는데, 계속 정상적으로 Int로 형변환을 할 수 없다며 에러가 뜬 것이다. 원인: [SerializeField] private TextMeshProUGUI inputTxt; var num = int.Parse(inputTxt.text); 문제 상황에서는 위의 코드처럼 Input Field의 자식으로 있는 Text를 TMP로 가져와서 .text로 접근했었는데, 이게 아무래도 문제가 됐던 모양이다. 해결: 가져올 텍스트를 Input Field의 하위 자식을 가져오지 말고, 처음부터 TMP_InputField로 ..

크기가 작은 부분문자열 - TIL#31

오늘의 알고리즘 오류 상황 [크기가 작은 부분문자열] 문제 : 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요. 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다. 오류 상황: 분명 로직은 맞는 것 같은데 몇몇 문제에서 '런타임 에러'가 뜬다. using System; public class Solution { public int solution(str..

3D Survival 게임 만들기 - TIL#30

(나머지 내용 보충 후 정리 예정) Directional Light : Light 컴포넌트가 들어있음. 빛을 쏴주고 계산하는 것 Light 자체가 연산 자체가 비싸기 때문에 적절한 장소에서만 사용하자 폴더 Materials 생성 -> Material(오브젝트의 재질) 생성 Skybox 라고 명명, 구체 아니면 큐브 형태로 주로 사용함 Shader Standard -> Skybox/Procedual 이걸 적용하려면... 우측 하단 Auto Lighting 버튼 Environment -> Skybox Material -> Skybox 적용 Empty -> Player -> CameraContainer(플레이어의 눈 역할) MainCamera를 CameraContainer의 자식으로 세팅, 그리고 Transf..

C# 메모리의 작동 방식(구조체와 클래스의 차이) - TIL#29

C# 메모리 하드 디스크 : 컴퓨터에 물리적으로 파일을 저장 메모리 : 프로그램이 실행되는데 필요한 데이터가를 저장 메모리의 종류 Code, Data, Heap, Stack 1. 프로그래머가 작성한 코드를 보관 2. static, const, 전역변수 : 어플리케이션 전반에 필요한 데이터 저장 3. 참조 데이터 (객체) 저장 4. 로컬 변수, 매개 변수 저장 : 어플리케이션 실행 순서에 필요한 데이터 보관 int x = 10; 라고 한다면 예를 들어, 메모리 주소가 00000000인 메모리에 10을 저장하고 이름을 x로 한다 변수명 같은 경우는 Stack에 저장, 참조 데이터의 경우 Heap에 저장 따라서, Person chad = new Person(age:32, name:"chad"); 라고 한다면 ..

Unity 팀 프로젝트(2) : 발표와 회고 - TIL#28

# 우리 팀의 시연 영상 https://youtu.be/5rtcWZLyd60 # 피드백 FPS가 갑자기 늘어나는 현상이 있는데 프레임을 고정으로 하는 기능이 있으면 좋을 것이다. 벽에 부딪혔을 때 게임 이펙트를 더 줬으면 좋았을 것 같다. 게임이 어떻게 진행되는지 처음 보면 알기 어려운 부분이 있기 때문에 처음에 알려주면 좋을 것 같다. # 회고, 일주일 간 프로젝트를 진행하며 발표 후 느낀 점 아쉬웠던 점 1. 일단 Notion 작성할 때 트러블 슈팅 항목을 따로 만들었을 정도로 처음에 신경을 많이 썼지만, 마감 이틀 전인 29일, 30일에 대부분 항상 하던 작업을 하고 버그 잡는 것이 대부분이라 Notion에 신경을 많이 못 쓴 사실이 있었다. 결과적으로 트러블 슈팅에 대한 자세한 사진 자료나 코드가..

Unity 팀 프로젝트 : 버그 찾고 마무리하기 - TIL#27

오늘의 문제 상황 문제 원인 JsonUtility가 Dictionary나 Struct 구조를 직렬화(Serialize)하지 못해 생긴 일 해결 방법 Package Manager에서 Newtonsoft.Json 패키지를 설치한다. Dictionary 자료 구조의 경우 Seriealizable 하지 않기 때문에 직렬화를 하려면 다른 방법을 찾아서 여러 복잡한 처리를 해주어야만 한다. 그러나 ‘플레이어 이름 - 최고 기록’ 정보만 묶어서 같이 저장하면 어떤 데이터 형식이든 상관은 없기 때문에 굳이 Dictionary 자료형을 쓸 필요가 없다. 따라서, saveRankingData 클래스의 내부 데이터 형식을 List 형식으로 변경했다. 여기서 RankingData는 플레이어 이름과 최고 기록 정보를 저장하는 ..

Unity 팀 프로젝트 : Invoke의 사용법, BPM 계산 - TIL#26

어려웠던 점 & 문제 상황 1. BPM 계산이 조금씩 계속 어긋나는 현상 문제 상황 BPM(Beats Per Minute, 분당 비트 수)에 맞춰 플레이어 hp UI가 작아졌다 커지도록 하려고 했지만 무슨 이유에서 인지 계산 식은 정확하나 계속 애니메이션과 박자가 맞질 않는 것이었다. 원인 추정 박자 하나가 가지는 길이는 60초 / BPM 이다. 가령 BPM이 120이라면 4분박 하나 당 0.5초의 길이를 가진다. 그래서 내가 작성했던 코드는 일종의 반복문을 만들고 박자 하나 만큼의 길이를 넘는 조건을 만족하면 시간이 0으로 초기화 되는 방식이었다. private void CheckBPM(int bpm) { chunk = 60f / bpm; timer += Time.deltaTime; if (timer ..

Unity 팀 프로젝트 : 카메라 줌 인/아웃, 플레이어 HP UI 만들기 - TIL#25

오늘의 개발 상황 요약 영상에서 확인 가능하듯이 카메라의 줌 인/ 줌 아웃을 값으로 조절할 수 있게 했고, 플레이어의 HP 값에 해당하는 방사형 게이지 UI를 중앙에 추가했다. Player.cs에서 값을 가져와서 현재 플레이어의 HP를 나타내는 UI다. 줌 인/아웃의 원리는 어제 계산했던 3차원 좌표의 확장이다. 여기서 할당된 상수인 '10' 이라는 값은 기울기가 0일 때 최초의 카메라 위치의 z축 절대값이었다. 그래서 이 상수만 변수로 바꾸어 조절할 수 있게 하면, 자연스레 카메라의 줌 인/아웃이 구현되는 것이다. 추가로 구현을 맡은 Ranking이다. 원본 게임에서도 랭킹을 통해 자신과 다른 사람의 기록을 겨룰 수 있다. RankingScene을 만들어 RankingManager를 통해 복사 가능한 ..

Unity 팀 프로젝트 : 카메라 회전과 기울임 기능 추가하기 - TIL#24

오늘의 개발 상황 요약 오늘은 카메라 기능(회전, 기울임 등) 구현에 중점을 두고 개발에 착수했다. 위 사진은 게임 시작 전 탑 다운 뷰로 수직으로 정육각형을 수직으로 바라보는 모습이다. 게임 시작을 하는 동시에 카메라가 처음에 설정한 40도로 기울어지며 기울어진 평면을 따라 일정하게 육각형 주위를 돌아 마치 육각형이 도는 듯한 연출을 보여준다. 영상을 보면 기울어진 각도, 회전 속도, 회전 방향 등을 구현해놓은 것을 볼 수 있다. private 변수 직렬화 '[SerializeField]'를 이용해 Inspector 내에서 자유롭게 수정하며 테스트 할 수 있게 했다. Tilt Angle은 기울어짐 정도, 단위는 degree이고 범위는 1에서 90이다. Rotation Speed는 회전 속도이고, 범위는..

Unity 팀 프로젝트 : 개발 방향 결정, 임무 분담 - TIL#23

오늘의 개발 상황 요약 새로운 팀 프로젝트를 진행하는데 있어서, 우리 팀은 투표로 고전 게임 중 '똥피하기'와 맥락 상 비슷한 게임을 찾아 재해석하기로 했다. 그 중 'Super Hexagon'이라는 추억의 게임을 재해석하기로 했다. Git Commit 규칙을 정하고 역할 분담을 했다. 내가 맡은 역할은 UI, UX(디자인), 카메라, GameManager이다. 게임 플레이 시 플레이어에게 보여지는 UI인 'InGameUI' 게임오버 시 플레이어에게 보여지는 UI인 'GameOverUI' 그리고 테스트 용으로 만든 'GameOverButton'을 만들었다. InGameUI 좌측 상단엔 게임 진행 시간, 현재 레벨과 레벨명이 보여진다. 우측 상단엔 최고 기록을 보여주는데, 아직 구현 전이다. GameOve..

728x90