분류 전체보기 27

Boid(+그리드분할기법) 성능 개선 01

boid 알고리즘와 그리드 분할 기법을 사용하면서 60프레임을 유지하는 객체수가350-> 600개로 늘어났지만 아직 충분하지않다. 성능 개선을 위해 유니티에서 자체 제공하는 기능인Profiler 사용해 보기로 했다. 유니티 프로파일러에서는 실행중인 상황을 녹화하여, 일정 순간에 어느정도 프레임이 나오는지,CPU사용률을 비롯한 각종 컴퓨터 자원을 얼마나 사용하는지를 나타내 준다. 프레임이 가장 떨어지는 순간을 분석한 결과 예상대로 Boid 알고리즘을 사용하는 Enemy 클래스가 가장 많은 작업을 진행하고 있었다. 그중 Enemy.CalculateSeparation() 메서드는 이웃간에 거리를 유지하려는 힘을 계산하는 메서드이다.해당 메서드에서 가장 많은 부담을 차지하는건 Transform.get_posit..

카테고리 없음 2024.09.11

Boid 알고리즘 구현연습

몹 700마리가 넘어가자 프레임이 60까지 떨어젔다 연산을 단순화 하기 위해 이번에는 Boid 알고리즘을 찾아보기로했다먼저 Boid 알고리즘의 구현이다using UnityEngine;using System.Collections.Generic;public class Boid : MonoBehaviour{ public float speed = 2f; // 이동 속도 public float neighborRadius = 5f; // 이웃을 찾는 반경 public float separationDistance = 2f; // 너무 가까이 붙지 않기 위한 최소 거리 private Vector2 velocity; // 현재 이동 방향 및 속도 ..

카테고리 없음 2024.09.09

무한맵 이동

맵을 이동하는 로직을 만들고 있는데 문제가 발생했다잘 작동하는듯했는데 일부 타일이 자기 멋대로 뛰기 시작한다계속 돌려보면서 문제를 확인해봤는데 발견한 문제점은 좌표의 이상이다타일은 y축이 -15인데 플레이어는 -15.63이였다.즉 두 오브젝트의 y축 차이는 0.63이다 근데 화면상에 플레이어는 누가봐도 4정도의 차이를 가지고있어야한다grid위에 올라간 tile 오브젝트와 scene 오브젝트로 존재하는 player는 서로 다른 좌표를 사용한다는 결론을 내렸다.서로 사용하는 좌표의 기준은 다른데, 좌표값을 단순비교하다보니 특정상황에서 완전히 틀린 결과가 나온다. 문제해결을 위해 chatGPT에서 물어봤다 tilemap에서 사용하는 새로운 함수 알았다.각 함수가 어떤 값을 리턴하는지 확인하기 위해 디버그로 찍..

카테고리 없음 2024.09.07

AABB 구현 01

문제의 발견몬스터 인스턴스가 700개가 넘어갈때쯤 60프레임 이하로 떨어지기 시작했다수백 수천마리의 몬스터가 나오는 게임에서 이 이상 프레임이 드랍되는건 지양해야하고또 개발환경은 PC지만 실 플레이는 모바일이기때문에 성능이 더 낮은 모바일 기기에서는이것보다 더 적은 수에서부터 연산에 과부하가 올것이다. 먼저 충돌 처리에 대해 적합한 방법을 살펴봤다https://velog.io/@sjhbelieve/Unity%EC%B6%A9%EB%8F%8C%EC%B2%98%EB%A6%AC Unity_충돌처리https://cakelemon.tistory.com/3https://3dev.tistory.com/533D 게임을 하다보면 두 물체가 서로 부딪쳤을 때나 혹은 플레이어의 캐릭터가 지형에 겹쳐서 이상하게 반응하거나 하는..

카테고리 없음 2024.09.07

프로세스 스레드 코루틴

프로세스 = 프로그램의 인스턴스프로그램은 흔히 우리가 아는 실행파일이며, 대표적인 윈도우 실행파일 exe가 있다.프로그램을 실행시키면 작업관리자에는 프로세스가 등장하며, 운영체제(OS)는 이를 관리한다.쉬운 예시로 프로그램이 코카콜라 본사라면프로세스는 코카콜라 한국지부라고 생각할수있다. 스레드 = 프로세스에서 작동하는 여러 흐름의 단위스레드는 CPU에서 기능단위중 하나로 보통 코어의 갯수와 크게 연관이있다.라이젠5 3600x의 경우 6개의 코어에 각 2개의 멀티 스레드가 적용되어 총 12개의 스레드를 가지고있다는 내용이다.스레드는 프로세스내에서 서로 별도의 스택을 가지고 프로세스의 연산을 처리한다.쉽게말해 코카콜라 한국지부에 있는 직원A 직원B ... 라고 볼 수 있다.직원이 나뉘어저 있으니 직원A는 마..

표창 던지기

회전을 위해 .Rotate 메서드와움직임을 위해 .translate 메서드를 사용했는데표창이 똑바로 날아가지 못하고 이상하게 도는 현상을 발견했다 예측되는 문제는 translate이 단순히 position의 좌표를 이동시키는것이 아니라오브젝트의 방향에 따라 좌표의 이동에 영향을 준다는것이다. 그래서 translate메서드를 빼버리고 그냥 좌표자체를 변경하는 방식으로 구현하였다.using System.Collections;using System.Collections.Generic;using UnityEngine;public class kunaiController : MonoBehaviour{ float speed = 0; float rotSpeed = 0; Vector2 startPos; ..