전체 글 98

알고리즘 - A*에 대해 알아보자

오늘은 A*알고리즘에 대해 정리해 보고자 합니다. A* 알고리즘A*알고리즘은 대표적인 길 찾기 알고리즘으로서 보통 A* 같은 알고리즘을 휴리스틱(heuristic) 하다고 설명하던데간단히 정리하자면  "경험에 기반하여 문제를 해결하는 방식" 정도로 이해하시면 됩니다. 완벽하게 입증되진 않았지만대신 실용적이고 어느 정도 빠르게 원하는 답에 접근할 수 있기에이러한 방식을 사용하는 듯합니다. 공식으로 정리하자면 다음과 같습니다.  f(n) = g(n) + h(n)   g(n): 시작 노드에서 현재 노드까지의 실제 비용h(n): 현재 노드에서 목표 노드까지의 추정 비용(휴리스틱)f(n): 총 예상 비용  추정 비용에 원하는/해당하는 가중치를 줌으로써,휴리스틱한 함수가 적절하다면 항상 최적의 경로를 찾는다는 게 ..

카테고리 없음 2024.12.13

벡터의 내적(Inner Product)과 외적(Cross Product)

오늘은 내적과 외적에 대해 정리해보고자 합니다. 캐릭터가 어느 쪽을 향하고 있는지, 어디로 움직이고 있는지,얼마나 빨리 움직여야 하는지 등 게임 속에서 많은 요소들이 벡터 연산을 기반으로 하고 있습니다. 분명 고등학교랑 대학교 수업에서 배운적이 있지만설명하려니 개념정리가 안되어 있는 느낌이어서 작성해봤습니다. 벡터 크기와 방향을 모두 가지고 있는 물리량 스칼라 크기만 있고 방향이 없는 물리량 내적내적은 두 벡터의 곱 두 벡터가 수직일때 내적은 0 이다. 벡터의 내적의 결과값은 벡터가 아닌 스칼라  언제 사용할까  내적을 사용하면  두 백터 사이의 각도를 구할 수 있습니다. 두 벡터 간의 각도 계산을 통해 플레이어가 적을 바라보는 방향을 확인할 수도 있고,물체가 플레이어 보다 앞에 있는지 뒤에 있는지 판단..

카테고리 없음 2024.12.12

유니티 - Find 계열 함수 사용 지양해야 하는 이유

오늘은 Find 함수 사용과 관련해 정리하고자 합니다. Find 계열 함수들은 이름을 통해 해당 오브젝트를 찾아주는 기능을 제공합니다. 편리해 보여서 자주 사용할 것 같지만 대부분 사용을 지양하더군요.  왜일까요?  1. Find 계열 함수들은 씬(Scene) 전체를 순회하면서 해당 이름을 검색하는 문자열과 비교합니다.이 과정에서 성능적으로 문제가 발생할 수 있습니다.2. 여러 개의 같은 이름(혹은 타입 등)의 오브젝트가 있을 경우 의도치 않은 결과가 발생 수 있습니다.3.컴파일 - 코드 - 에서 확인할 수 있는 게 아니라 런타임 도중에 이름이 변경되거나 변동이 생기면 오류가 나기 쉽습니다. 이러한 이유로 사용을 지양하고 있는 듯합니다. 그러면 특정 오브젝트를 찾으려면 어떻게 하는 게 좋을까요?Find ..

카테고리 없음 2024.12.11