728x90
반응형
SMALL

게임 13

원거리 공격하는 몬스터 나 쳐다보게 하기

오늘은 원거리 공격을 하는 몬스터가 계속 나를 쳐다보게하여 공격이 따라오게 만들었다. 몬스터의 프레임워크 설명은 생략하고 어떻게 구현했는지만 소개하겠다.Vomit은 구토라는 뜻으로 구토를 날려 공격하는 좀비이다. Execute는 매 프레임당 호출되는 Update인데 여기서 좀비가 나를 계속 쳐다보게 만들었다.나를 쳐다보려면 좀비의 로테이션값이 계속 변동이 돼야한다. 그리고, 고개를 위아래로 회전할일은 없기 때문에 y 값은 0으로 고정시켰다. 이것은 애니메이션 이벤트로 등록하여 좀비가 토사물 공격을 하는 로직이다.별거없다. 공격하기 전에 타겟의 포지션 값을 가져와 그쪽으로 발사하라는 것이다.

TIL 2025.05.19

Unity Fusion FPS 게임에서 스코어보드 동기화 구조 이해 및 개선

오늘은 스코어보드에 대해서 다뤘다. 어떤 문제가 있었냐면- 새로 조인한 플레이어가 기존 플레이어들의 스코어보드 정보를 보지 못함- RPC_AddPlayerRow 호출이 전체 클라이언트에게 broadcast되어 기존 정보가 새 클라이언트에게 전파되지 않음 그래서 오늘 내가 배운 개념들에 대해서 정리해보겠다. Fusion의 RPC 대상 지정(RpcTargets)RpcTargets.InputAuthority: 특정 PlayerRef 에게만 RPC를 보낼 수 있다.RpcTargets.All: 모든 클라이언트에 broadcast된다.신규 플레이어 조인 처리 방식 분리모든 클라이언트에 새 플레이어 한 줄 추가: RPC_BroadcastAddPlayerRow조인한 플레이어에게만 기존 플레이어 정보 전달: RPC_Ad..

TIL 2025.04.29

UIScoreboardView(점수판, 상황판) 트러블슈팅

오늘은 스코어보드에 문제가 있었다. 무슨 문제였냐면 새로운 플레이어가 들어오면 상황판에 새로 들어온 플레이어가 떠야하는데 안뜨는 문제였다.우선 왜 안떳냐면 저렇게 rowParent 자식으로 로우프리팹을 생성을 시켰다. 하지만 저 위치에 생성되지 않고엉뚱한 위치에 생성이 됐다. 그래서 안뜨는 것이었다. 근데 왜 엉뚱한 위치에 생성이 됐냐면 바로 네트워크비헤이비어를 받은 스코어매니저에 UIScoreboardView를 인스펙터에서 직접 할당받아서 UIScoreboardView는 기본 오브젝트였는데 네트워크 오브젝트처럼 동작이 되는 문제였다. 그래서 나는 인스펙터에서 할당이아닌 인스턴스로 받아오는 방법으로 했다.이렇게하니 UI프리팹이 네트워크 오브젝트가 아닌 기본 오브젝트가 되면서 내가 원하는 위치에 생성이 됐..

TIL 2025.04.24

기초부터 탄탄하게! - 알고리즘 초급편[원하는 문자열 찾기]

오늘은 알고리즘 초급 [원하는 문자열 찾기]를 진행해보았다. 우선 알고리즘이란?어떤 문제를 해결하기 위한 절차나 방법, 규칙들의 집합을 말한다.쉽게 예를 들면 어떤 문제를 푸는 단계별 요리법 그래서 가장 기초적인 알고리즘 [원하는 문자열 찾기]를 풀이해보겠다.우선 문제는 프로그래머스에서 가져왔다.출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181878 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 설명이다. 알파벳으로 이루어진 문자열을 비교하는 문제이다. 이것은 나의 답이다. 사람마다 다 답이다를 수 있는데 어떤 게 좋은 정답인..

TIL 2025.04.16

기초부터 탄탄하게! - 최적화편

오늘은 최적화에 대해서 배웠다.오늘은 코드적인 부분보단 이론적인 부분이 많을 것이다. - 우선 최적화란?최적화는 게임의 성능을 향상시키기 위해서 CPU, GPU, 메모리, 네트워크 등의 자원을 효율적으로 관리하는 과정이다.Unity에서는 프레임 속도(FPS)를 높이고, 끊김(Lag)없이 부드러운 게임플레이를 유지하는 것이 최적화의 목표이다. 최적화에는 렌더링 최적화, 스크립트 최적화가 있다. 렌더링 최적화의 방법은 이러하다.메모리 프로파일러를 활용해야 한다.Window → Analysis → Profiler → Memory 에서 메모리 사용량을 분석한다.그리고 어떤 리소스가 가장 많은 메모리를 차지하는지 확인한다.※ 여기서 주의할 점은 유니티엔진으로 플레이를 해본다면 정확한 메모리 사용량이 아니기 때문에..

TIL 2025.03.25

기초부터 탄탄하게! - 제이슨(Json)편

오늘은 저장할 수 있는 게임이라면 필수인 제이슨에 대해서 배워보겠다. 우선 제이슨이 뭐냐JSON(JavaScript Object Notation)은 데이터를 저장하고 교환할 때 사용하는 가벼운 텍스트 형식이다.쉽게 말해서, 데이터를 보기 쉽고, 정리된 상태로 저장하는 방법! 많은 저장방법이 있지만 그 중에서도 제이슨의 특징은 다음과 같다.1. 딱 봤을때 읽기가 쉽다.2. 키(key)와 값(value)이 쌍으로 이루어져 있다. 3. 프로그래밍 언어와 상관없이 사용 가능하다. 그래서 어떻게 사용하는데?우선 데이터를 이런 식으로 별도로 보관한다.그 다음으로는 이 데이터를 저장하고, 로드하는 방법이다.우선 저장방법이다.저기있는 데이터들을 저장하는건데, 매우 간단하다.어떤 데이터를 저장할지 작성하고,저장한 데이터..

TIL 2025.03.24

기초부터 탄탄하게! - 액션(Action)과 펑션(Func)편

오늘의 기초부터 탄탄하게는 액션과 펑션을 다뤄보겠다. Action과 Func은 델리게이트(Delegate)의 한 종류로, 메서드를 변수처럼 다룰 수 있도록 도와준다.  잠깐만!! 델리게이트가 뭔데??델리게이트(Delegate)는 메서드를 가리키는 포인터(참조 변수)로, C#에서 메서드를 변수처럼 저장하고 실행할 수 있도록 해주는 기능이다. "어떤 메서드를 대신 호출할 수 있는 타입" 이라고 생각하면 편하다. 그럼 이제부터 액션과 펑션의 차이점에 대해 알아보겠다. Action은 반환값이 없는 델리게이트로, void를 반환하는 메서드를 참조하는 데 사용되고, 매개변수를 받을 수 있다.이처럼 Action은 반환값이 없는 메서드를 저장하고,Action처럼 제네릭을 사용하면 매개변수를 받을 수도 있다.  그 다음..

TIL 2025.03.21

유니티 뮤직 존(music zone) 생성하기

오늘은 특정 공간에 들어가면 음악이 재생되는 뮤직 존을 구현해 볼 것이다. 특정 공간을 만들기 위해 오브젝트를 생성하고박스 콜라이더와 오디오 소스 컴포넌트를 추가한다. 그리고 뮤직존이라는 스크립트 작성을 시작한다.먼저 변수들을 작성하는데재생할 음악(audioSource), 변화시간주기(fadeTime), 최대볼륨(maxVolume), 타겟볼륨(targetVolume)을 작성해준다. 그 다음 스타트에서 타겟불륨을 0으로 설정하고, 오디오 소스를 컴포넌트에서 가져오고,오디오소스의 볼륨을 타겟볼륨 즉, 0 으로 설정해준다. 그리고 오디오소스를 재생해준다. 그리고 업데이트에서 if문을 작성하는데Mathf.Approximately가 뭐냐면Mathf.Approximately(a, b)는 a값과 b값이 거의 같은 값..

TIL 2025.03.17

유니티 3D 개인 프로젝트 Bird Up! 완성과 소감

내일까지 기한인 개인 프로젝트를 오늘 마무리 하였다. 게임을 해보고 싶은 사람들은 이 링크를 이용해주시길 바랍니다.https://play.unity.com/ko/games/9b7f271e-3a7d-4536-be16-5fb2ef1f0d04/bird-up Bird Up! on Unity Play3D Jump Gameplay.unity.com 우선 이 게임은 3D로 만든 간단한 게임인데 어느 날 갑자기 날지 못하는 새가 점프를 하여 아이템을 먹은 후날지 못하는 저주를 풀어 엔딩을 보는 그런 게임이다. 이 프로젝트를 진행하면서 어려웠던 구현은 움직이는 플랫폼 구현, 각종 사운드 구현, 게임 내에서 환경설정 구현이였다. 여태 프로젝트를 진행하면서 사운드 구현을 내가 담당하지 않았기에 처음 구현해봤는데 사운드를 추..

TIL 2025.03.10

유니티(Unity) 점프대, 스피드대 구현하기

오늘은 밟았을때 점프하는 점프대, 스피드가 오르는 스피드대를 구현해보았다.먼저public float superJump;점프대에 올랐을 때 얼마나 점프할 것인지 슈퍼점프변수를 만든다. private void OnCollisionEnter(Collision collision) {     if (collision.gameObject.CompareTag("SuperJump"))     {         rb.AddForce(Vector3.up * superJump, ForceMode.Impulse);            }}그리고 콜리젼엔터에 슈퍼점프라는 태그를 달은 오브젝트에 닿았을 때 구현하도록 만든다. 스피드대를 만드는것도 간단하다. 코루틴을 사용해서 일정시간동안 스피드가 오르도록 하면 된다.먼저publi..

TIL 2025.03.07
728x90
반응형
LIST