odyssey 23

#12 odyssey 개발일지 : 셰이더 그래프로 지형 외각선 만들기

이제 셰이더를 통해 바다와 환경광을 구현하려고 한다... 원래는 그러려고 했는데 내가 모르는 사이에 SRP라는 렌더링 파이프라인이 나왔다. 고3때 갑자기 (유니티도 모르면서) 셰이더에 관심이 생겨서 급발진으로 책을 두권을 샀는데.. 유니티 쉐이더 스타트업은 반도 안읽었고 유니티 물리 기반 셰이더 개발은 펼치지도 않음..^___^ 그랬는데 그새 새로운 기술이 생기다니.. SRP 원래는 바다 셰이더를 구현하려고 이것저것 자료를 찾아봤는데 셰이더를 블록코딩마냥 노드로 연결해서 구현하길래 찾아보니깐 SRP라는게 새로 생겼다. 원래는 유니티에서 서피스 셰이더와 버텍스&프래그먼트(픽셀) 셰이더를 지원했는데 2018년부터 Scriptable Render Pipeline 라는 새로운 렌더링 파이프라인을 공개했다. 그리..

odyssey 2023.06.24

#11 odyssey 개발일지 : parallax scrolling

게임 시스템과 뼈대는 얼추 갖춰진 것 같아서 이제 컨셉아트에 맞춰서 그래픽 부분을 끼워넣으려고 한다.. parallax scrolling 구름이나 바다같은 소재는 뒤에 있고, 어떤 나무는 가까이, 어떤 나무는 멀리 있다. 2d에서 이런 원근감을 나타내기 위해, 멀리있는 소재는 느리게, 가까이 있는 소재는 빠르게 이동시켜서 원근감을 나타내는데 좀 찾아보니깐 이런 기법을 parallax scrolling 이라고 부르는 것 같다. 게임개발 뿐만아니라 웹 개발에서도 많이 사용하는듯 하다. 구현 https://www.youtube.com/watch?v=zit45k6CUMk 이 유튜브 강의를 참고해서 만들었다. using System.Collections; using System.Collections.Generic..

odyssey 2023.06.22

#10 odyssey 개발일지 : 오브젝트 풀링 분리

저번 글에 이어서 오브젝트 풀링을 하는 부분은 떼어서 따로 분리하려고 한다. 기존 TerrainManager using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Pool; public class TerrainManager : MonoBehaviour { public ObstacleGenerator obstacleGenerator; public List terrainPrefabs = new List(); public List terrainDatas = new List(); public TerrainPool terrainPool = new TerrainPool(); private Dict..

odyssey 2023.05.07

#9 odyssey 개발일지 : 동적 지형생성과 오브젝트 풀링

(드디어) 중간고사가 끝나서 다시 스터디와 개발을 시작하려고 한다! 지형을 어떻게 만들지 생각해 봤는데... 미리 여러 패턴의 지형을 생성해놓고, 런타임중에 적당히 이어붙이려고 한다! 우선 테스트를 위해 적당한 지형 메쉬 3개를 만들어서 프리팹화 했다 위의 세 타입의 지형중 랜덤하게 하나를 뽑아서 이어붙인다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class TerrainManager : MonoBehaviour { public ObstacleGenerator obstacleGenerator; public List terrainPrefabs = new List(); public List te..

odyssey 2023.05.06

#8 odyssey 개발일지 : 장애물 만들기

장애물 생성 장애물을 만들기 위해, 우선 장애물 역할을 할 바위를 그렸다.. using System.Collections; using System.Collections.Generic; using UnityEngine; public class ObstacleGenerator : MonoBehaviour { public GameObject obstacle; public GameObject testTerrain; public void CreateObstacle(GameObject terrain) { Vector2[] points = terrain.GetComponent().points; int randomPoint = Random.Range(2, points.Length - 2); Vector3 obstacl..

odyssey 2023.04.03

#7 odyssey 개발일지 : 커스텀 에디터

odyssey의 지형생성 방식에 대해 생각해봤는데.. 미리 여러 타입의 지형을 생성해놓고, (일단은) 런타임 중에 적당히 랜덤하게 붙이기로 했다. https://san10.tistory.com/10 #5 odyssey 개발일지 : 베지어 곡선으로 곡선 지형 생성 지금까지는 임시로 곡선 지형을 만들었는데 이제는 베지어 곡선으로 지형을 만들려고 한다. 베지어 곡선이란? n개의 조절점과 선형 보간을 통해 얻을 수 있는 곡선으로, n-1차 베지어 곡선이라고 san10.tistory.com 지난번에 지형을 생성하는 기능을 만들었기는 한데.. 그런데 문제는 스크립트로 지형을 생성하기 때문에 런타임 중에만 생성이 되고 에디터로 돌아오면 파괴되서 볼 수가 없다... 그래서 방법을 좀 찾아봤는데 에디터를 커스텀해서 에디..

odyssey 2023.03.30

#6 odyssey 개발일지 : perline noise로 지형 생성

저번에 베지어곡선으로 지형을 생성했다. 원래 생각대로라면 런타임중에 베지어곡선으로 지형을 생성하려 했는데... 맵 생성 알고리즘을 찾아보다가 noise로 지형을 생성할 수 있다는 걸 알게되었다! perline noise 펄린 노이즈는 Ken Perline이 영화 '트론'을 제작중에 개발한 노이즈 함수이다. 유기적인 모양의 노이즈를 생성한다. 생성원리 임의의 점 x,y은 항상 그리드 안에 위치한다. 점 (x,y)을 둘러싼 그리드의 꼭지점부터 gradient 벡터를 생성한다. 이때 gradient 는 크기가 1인 벡터이고, 이는 유사 난수라고 하는데 왜냐하면 그리드당 랜덤한 벡터값을 부여하기 때문이다. 다음으로 그리드의 꼭짓점부터 점 (x,y)로 향하는 거리벡터를 계산한다. 위에서 구한 gradient 벡터..

odyssey 2023.03.26

#5 odyssey 개발일지 : 베지어 곡선으로 곡선 지형 생성

지금까지는 임시로 곡선 지형을 만들었는데 이제는 베지어 곡선으로 지형을 만들려고 한다. 베지어 곡선이란? n개의 조절점과 선형 보간을 통해 얻을 수 있는 곡선으로, n-1차 베지어 곡선이라고 부른다. 3차 베지어 곡선을 그린다고 할때, 각 조절점을 A, B, C라고 가정하면 선분 AB, 선분 BC를 그릴 수 있다. 선분 AB와 BC 사이에서, 0~1사이의 값 t 만큼 비례한 점인 D, E를 찾는다. 선분 DE에서도 위에서 했던 것처럼 t값 만큼 비례한 점인 F를 찾고, t가 0~1까지 변화할때, F가 그리는 궤적이 2차 베지어 곡선이다. 코드로 구현 유니티에서 Vector3.Lerp()라는 함수를 통해 쉽게 구현할 수 있었다! public class BezierGenerator : MonoBehaviou..

odyssey 2023.03.17

#4 odyssey 개발일지 : 상태 패턴으로 리팩토링 하기

지난 4달동안 개발일지를 쓰지 않았다 개발일지를 쓰고 바로 여행+기말과제+기말고사를 치르고 나서 종강을 했고 종강을 하고나서 5일 뒤에 오리키우기를 출시했다 오리키우기를 출시하고 많은 피드백을 받았고.. 방학동안은 오리키우기 개발에 집중했다. 오리키우기 다음은 뭘만들지 고민이 많았는데 그냥 odyssey 개발하던거 이어서 개발하기로 마음먹었다 어차피 마땅한 아이디어도 없었고 오리키우기와 장르가 다른만큼 배우는게 있을 것 같아서이다. 그래서 이번 1학기에는 odyssey 개발 완료하는것이 목표이다. 그래서 이번에는 기존의 PlayerController 스크립트에 상태 패턴을 적용해보았다. 상태 패턴이란? 디자인 패턴 중 하나로, 상태를 체크해서 특정 행위를 하는 것이 아니라, 상태 자체를 객체화 하는 것이..

odyssey 2023.03.13

#3 odyssey 개발일지 : velocity와 애니메이션 커브로 자연스러운 점프 만들기

이제 이동도 만들었으니 캐릭터 점프를 만들 차례다. 그런데 addForce로 하면 쉽게 만들 수 있을줄 알았는데... 문제가 발생했다. addForce로 Vector2.up 방향으로 힘을 줘도 점프를 하지 않는다.. 이유는 내가 velocity로 매 프레임마다 속도를 직접 조절하기 때문이다. velocity와 addForce의 차이를 잘 이해하지 못했는데... velocity는 rigidbody의 velocity 값에 직접 접근해서 속도를 조절하고 addForce는 원하는 방향대로 직접 속도값을 계산해서 rigidbody의 속도값을 조절해주는 메서드라고 이해했다. 나는 이동을 구현할때 매 프레임마다 velocity를 조절하기 때문에 addForce를 해도 묻히는 것 같았다. 아마 내가 점프를 구현하기 위..

odyssey 2022.11.10