분류 전체보기 (30) 썸네일형 리스트형 선형 보간과 구면 선형 보간 선형 보간은 보통 Math.f 라이브러리의 Lerp 함수를 사용한다. 선형 보간은 일반적으로 두 벡터 사이에 직선의 위치를 파악할 때 사용된다. 그리고 오늘 Lerp 함수가 아닌 SLerp 함수를 사용하는 것을 보았다. SLerp 클래스는 구면 선형 보간을 수행해주는 함수이다. 이번 게시글에선 Lerp와 SLerp의 차이와 둘이 돌아가는 원리에 대해 공부한 것을 적겠다. 1. 선형 보간 (Linear interpolate) 선형 보간은 두 지점을 선형으로 연결해서 두 지점사이의 위치를 파악하는 방법이다. t를 기준으로 t가 0일 때 시작 벡터이고 t가 1일 때 목표벡터에 도달한다. 당연히 이는 직선 벡터에서 적용되는 것이다. 선형 보간에서 사용하는 직선은 두 벡터를 감싸는 외접원이 있다고 가정했을 때 둘.. WeaponGameProject - 개발 계획서 3인칭 액션게임 개발 계획서 프로젝트 명 : Weapon Game Project 개 발 환 경 OS Unity 3D Tools Visual Studio 2019 Language C# 일정표 전체 일정 2023.06.26 ~ 2023.07.24 개발 Client Character Monster Weapon 1 주차 메인 화면 제작 , 게임 종료 구현 플레이어 이동 구현 스테이터스 파일 제작 - 2 주차 - 무기 던지기 , Bash 구현 행동패턴 구현 , 인스턴스화 무기 클래스 구현 3 주차 - 공격 구현 , 플레이어 체력 구현 몬스터, 플레이어 간 상호작용 구현 4 주차 게임 클리어 구현 , 게임 최적화 (스테이터스 파일을 이용하여 안전성이 높고 빠르게 로딩하는 방법 연구) , 게임 중지 구현 , 버그 수.. Unity2D에서 메쉬를 활용한 출렁이는 물 구현 2달 전에 공부한 것을 이제야 블로그 포스팅 합니다. 0. 유니티에서의 일반적인 물 Unity에서 물은 일반적으로 쉐이더를 사용하여 구현한다. 이때 쉐이더는 메테리얼의 형태로 평면 메쉬에 적용된다. 평면메쉬에 적용 되기 때문에, 출렁이는 시각적인 효과를 나타내는 데는 수월하다. (쉐이더를 활용해 파티클을 묘사해도 부작용이 거의 없다.) 그러나 평면 메쉬이기 때문에 실제 물과같은 운동을 기대하기는 어렵다. 1. 유니티에서 파동운동을 구현하는 법 내가 묘사하고 싶은 실제 물의 운동은 아래 영상과 같다. 물 표면에 닿는 오브젝트의 운동량에 따라 물의 표면이 파동이 치는 효과를 연출하고 싶었다. 이런 효과는 최근에 개발되는 3d 게임에서는 꽤 흔한 편이지만, 이런 효과가 구현 되어있는 라이브러리는 거의 존재하지.. WeaponGameProject - 0 0. 게임 개발 개요 개발환경 : Unity 3D 개발 언어 : C# 등 게임 장르 : 3인칭 액션 게임 해당 게임개발 목적 이번에 제작할 게임은 3인칭 액션 게임이다. 게임의 카메라는 플레이어 등 뒤에 존재하여, 플레이어와 주변 사물 및 몬스터를 동시에 비춘다. WeaponGameProject의 주요 요소는 플레이어가 사용할 무기이며 이것과 상호작용하는 것이다. 일회용품처럼 빠르게 소모 및 전환이 되는 무기를 사용함으로서 역동적인 액션게임을 만들어보고자 한다. 1. 모티브로 삼을 게임 3개 1-1. Titan Souls https://youtu.be/7rf9khR4vLc 화살(무기)을 발사하고, 화살을 다시 회수하는 기믹에 집중한다. 1-2. The Legend of Zelda Breath of the.. 로그라이크 게임 구현 (4 - 2) 스킬 및 몬스터와의 상호작용 구현 캐릭터와 몬스터와의 충돌을 구현하였다. 충돌 판정을 구현하는 것 자체는 비트맵끼리 충돌을 감지해 bool값을 반환하는 IntersectRect를 활용하면 간단했다. 그러나 충돌 판정을 약 30프레임 즉 32ms마다 감지한다면 몬스터와 스치기만해도, 순식간에 CharacterLife가 줄어들 것이다. 때문에 충돌판정을 구현할 때 가장 신경써야 할 점은 캐릭터의 무적시간을 구현하는 것이다. 먼저 character 구조체에 characterInvincibleTime이라는 DWORD 자료형(unsigned long) 변수를 선언한다. 그리고 버퍼링을 구현한 메인 함수에서 선언된 시간을 저장하는 dwTime변수를 참조하는 포인터를 선언한다. 그리고 포인터 변수 활용해 CheckCharacterDamaged 함수에.. 로그라이크 게임 구현(4) - 비쥬얼 업데이트, TransparentBlt 함수 기존의 무미건조한 맵을 수정했다. 기존의 맵을 자세히 보면 파란색 사각형이 눈에 보일 것이다. 이는 플레이어가 이동할 수 있는 맵의 한계를 표시한 것이다. 포토샵을 사용해 새롭게 만든 맵에서 이 테두리를 따라 나무를 배치하여 이동의 한계선을 표현하였다. 숲을 연상시키는 필드에 어울리게 몬스터 비트맵도 변경했다. 기존 몬스터 비트맵과 달리 새로운 몬스터 비트맵의 배경색은 초록색이다. 배경색을 초록색으로 설정한 이유는, 비트맵의 배경을 생략시키고, 몬스터만 나오게 하기 위해서이다. window.h 헤더 파일에는 비트맵을 표현하는 함수가 있는데, 그 중에서 특정 색상을 생략시키는 함수가 있다. 비트맵의 배경색을 자주 쓰이지 않는 색으로 설정하고 그 색을 생략시키면, 몬스터만 그리게 할 수 있다. 해당 함수의 .. 로그라이크 게임 구현 - Context based steering algorithm을 활용한 움직임 구현 https://kidscancode.org/godot_recipes/ai/context_map/ 이번 알고리즘을 구현하는데 40시간 이상은 걸린거같다. Context based steering algorithm은 장애물을 피하게끔 이동하는 탐색 기법이다. 위 알고리즘을 한국어로 번역하면 "배열에 기반한 움직임 알고리즘"이다. 알고리즘의 이름처럼 움직임을 배열로 선언하고, 장애물을 피하게끔 코드를 짜면 된다. 그러나 해당 알고리즘은 전문적인 게임 툴을 사용하고 있다는 전제 하에 작성된 알고리즘이였다. 때문에 이를 게임 개발 툴이 아닌 WinAPI에 적용 시키는 것은 꽤 힘들었다. context-based steering algorithm을 활용한 몬스터 움직임 먼저 위 알고리즘에 대해 설명하겠다. 가장 먼.. 로그라이크 게임 구현 2주차 (2) 1. 몬스터 생성 구현 2주차에선 몬스터를 생성하고 몬스터의 움직임을 구현했다. 그리고 난수 생성기에 들어갈 난수 시드값은 randomdevice로 선언했다. 이것은 프로그램이 실행될 때 하드웨어의 상태에 따라 다른 시드값이 발생한다. 단 이 선언 자체가 작업량이 매우 큰 편이므로 static 선언으로 프로그램 실행 중 한번만 선언하게끔 했다. 이 시드값을 바탕으로 난수 생성기를 돌려야했다. 이 프로젝트를 진행하기 전 나는 시간(currentTime)을 시드값으로 사용하는 rand함수를 사용했다. 그러나 자료 조사를 하면서, rand함수는 한계가 명확하단걸 알았다. 그러다 찾은 대안의 랜덤 함수가 메르센 트위스터라는 난수 생성기이다. 기존의 rand 함수는 난수의 반복주기가 약 2^32로 짧다는 단점을 .. 이전 1 2 3 4 다음