728x90
SMALL

분류 전체보기 106

[스네이크] - 적 만들기(NavMeshAgent 활용)

우선 적은 맵을 혼자 돌아다니면서 사과를 먹으면서 성장한다.또한 적이 플레이어보다 레벨이 높을경우 플레이어를 먹을 수 있다.  위 두가지를 생각하며 적을 만들어보자.  2.NavMeshAgent 컴포넌트 추가:이동하려는 게임 오브젝트에 NavMeshAgent 컴포넌트를 추가하고, 속성들을 설정하여 이동 방식을 조정한다.3.목적지 설정 및 이동:스크립트에서 SetDestination 메서드를 호출하여 에이전트의 목적지를 설정하고 이동을 시작한다.  2.1 - 적 프리팹 만들기 아래와 같이 프리팹을 만들었다.또한 NavMeshAgent를 사용할 거기 때문에 Nav Mesh Agent컴포넌트 추가해주자.   3.1 - 적을 움직일 수 있는 스크립트 생성 - EnemySnake.cs   3.2 - 스크립트 수정..

[스네이크] - NavMeshAgent 사용하기 위한 세팅

유니티에서 최단 거리를 탐색하여 추적할 수 있는 캐릭터를 생성하는데에 사용되는 NavMeshAgent에 대해 알아보자.NavMeshAgent는 Unity에서 AI 캐릭터가 경로를 찾아 이동하도록 도와주는 컴포넌트이다. NavMeshAgent는 경로 탐색과 장애물 회피 등의 기능을 포함하여, 특정 목적지로 이동할 수 있도록 설계되어 있다. 일반적으로 적 캐릭터나 NPC 등이 플레이어를 추적하거나 지정된 위치로 이동하도록 할 때 많이 사용된다.  NavMeshAgent에 대한 자세한 설명 및 참조글 링크 - 추가예정  NavMeshAgent 사용 단계NavMesh 베이크:이동 가능한 맵을 설정한 후 Navigation 창에서 내비메시를 베이크하여 AI가 이동할 수 있는 경로를 생성한다.NavMeshAgent..

[스네이크] - 아이템 오브젝트 풀링 [최적화]

현재 아이템들이 생성되고 삭제되는 식으로 구현 되어있다. Instantiate(오브젝트 생성)은 메모리를 새로 할당하고 리소스를 로드하는 등의 초기화 과정이 필요하고, Destroy(오브젝트 파괴)는 파괴 이후에 발생하는 가비지 컬렉팅으로 인한 프레임 드랍이 발생할 수 있다. ⚠️하지만 갯수가 많아지거나 계속 지속되게 된다면 성능이 저하되거나, 가비지 컬렉션이 많이 생길 수 있다. 그러므로 미리 생성된 오브젝트들을 재활용하자.⚠️  해결방법  오브젝트들을 재사용하는 방식인 오브젝트 풀링을 해보자 1. 풀매니저를 통해 관리해주자.   2. PoolManager.cs 생성 딕셔너리에서 Queue를 사용하는 이유는 오브젝트 풀링에서 큐(Queue)의 특성이 적합하다. Queue는 FIFO(First-In-Fi..

[스네이크] - 아이템 효과 적용

아이템들이 랜덤 생성되는건 적용이 되었고 이제 플레이어가 그 아이템을 먹었을 때 그에 맞는 효과를 적용시켜보자. 각 아이템들의 효과를 적용시켜주기 위해Item스크립트를 하나 만들었다. 그리고 각 아이템 프리팹들에 추가해주자.  1. enum형식인 ItemType을 통해서 분류해주자.   2. 아이템 효과를 적용하는 메서드를 만들어주자.      3. 각 프리팹에 적용 사과스피드자석   결과

[스네이크] - 아이템 효과 메서드(스피드, 자석)

각 아이템을 먹었을 때 효과들을 구현해보자. 각 아이템 효과 메서드1. 사과를 먹고 몸통 갯수가 추가될 때2. 스피드 아이템을 먹고 이동속도가 빨라질 때3. 자석 아이템을 먹고 자석효과가 생길 때  1. 사과를 먹고 몸통 갯수가 추가될 때몸통갯수가 늘어날 때 마다 레벨업 하는 함수(SnakeCanvas.Cs)   몸통 갯수를 추가하는 함수 (SnakeManager.Cs)   2. 스피드 아이템을 먹고 이동속도가 빨라질 때 스피드 아이템을 먹었을 때 함수(SnakeManager.Cs)   스피드 아이템 효과의 지속시간이 끝났을 때 원래 속도대로 복구하는 함수(SnakeManager.Cs)   스피드 효과가 끝났을 때 몸통이 부드럽게 제자리로 돌아갈 수 있도록 조정해주는 함수(SnakeManager.CS) ..

[스네이크] - 먹이,버프 아이템 통합(코드 리팩토링)

지난 글에서 먹이아이템 생성과 버프 아이템을 무작위 생성하는 글을 썼는데 현재 코드는 먹이 아이템 생성 따로 버프 아이템 생성 따로 나뉘어져 있다. 그 코드들을 통합해서 쉽게 관리 할 수 있도록 코드 리팩토링을 진행해보자.   여러아이템을 관리하기위해 ItemData List를 만들어주었다.   또한 생성되어있는 아이템들을 통합적으로 관리하기 위해 spawnedItems로 통일해주었다.    ItemManager에서 각 항목에 맞게 수정해주자.    아이템 타입(enum형식)에 따라서 생성되는 함수로 수정해주었다.   먹이(사과) 가 부족할 때 호출해주는 함수도 조금 수정해주자.   아래와 같이 호출하면 잘 생성된다.

[스네이크] - 버프 아이템 추가(랜덤생성)

지난번에 사과를 랜덤생성 시켰는데 이번에 스피드 아이템과 자석 아이템도 추가해보자.   1. 스피드와 자석 아이템 프리팹을 생성해주자.   2. 버프아이템이 스폰될 곳(스폰된 버프아이템을 씬에서 관리)을  만들어주자. 아래에서 보이듯이 Spwan Item 이라는곳에서 랜덤하게 생성되는 버프 아이템을 만들어주자   3. ItemManager 스크립트 수정 및 관리 아래와 같이 Enum으로 각 아이템의 타입들을 만들어주고 타입을 구분해 버프 아이템들을 생성 시켜주도록 생각했다.   아래에서 함수를 만들어 주었다. 각 아이템에 맞게 생성되는 함수이다.   Start함수에서 생성시킬 버프 아이템의 프리팹, 갯수, 생성될 버프 아이템 관리 리스트, 생성위치 를 지정해주자     결과

[스네이크] - 아이템 또는 먹이 처리(랜덤생성)

보통의 뱀게임은 먹이를 먹으면서 성장한다.  사과를 먹으면 뱀의 몸통이 늘어날 수 있도록 맵에 사과를 랜덤 배치해보자.  1. 사과 프리팹 만들기 Tag를 통해서 충돌을 감지하기 위해 Apple 이라는 태그를 붙혀줬다.   2. 사과가 스폰될 곳(스폰된 사과를 씬에서 관리)을  만들어주자. 아래에서 보이듯이 Spwan Apple 이라는곳에서 랜덤하게 생성되는 사과를 만들어주자    추후에 추가될 아이템이 생길 수 있으니 ItemManager를 만들어서 관리해주자.    또한 나는 아래깔려있는 맵의 크기를 고려해서 아이템을 생성해줄것이다. 2가지 방법을 생각해봤다. 1. 맵의 사이즈(Scale)를 계산해서 랜덤생성2. 맵의 Collider를 계산해서 랜덤생성   1번의 경우(Scale)        2번의..

[스네이크] - 플레이어 움직임에 따른 카메라 이동

뱀의 꼬리 갯수가 늘어나면 카메라는 더 넓은 뷰를 보여줘야하고 또한 플레이어가 움직이는 방향으로 카메라도 같이 움직여야 할것이다. 고정되어있는 카메라가 아닌플레이어가 움직이면 그 방향과 각도에 맞게 카메라의 위치도 수정해보자.  1. 카메라 배치 및 스크립트 생성  3D의 플레이를 하기 위해서 위에서 아래로 바라보는 각도를 설정해주었다.   카메라 팔로우 라는 스크립트를 통해 카메라 제어   2. 스크립트 수정 1. 카메라는 플레이어를 따라서 움직여야한다.2. 몸통의 갯수가 늘어나면 뷰의 각도를 조절해주자.     조건은 레벨또는 몸통의갯수등.. 각 조건에 맞게 수정해주면된다.  결과

[스네이크] - 맵 배치

이제 게임을 할 수 있는 맵을 만들어보자 2가지를 생각해 보았다. 1. 게임 플레이시간이 늘어날 수 록 맵이 확장되면서 맵이 더커지는 경우2. 시작시부터 맵의 크기는 정해져있는 경우  플레이타임이 길어지거나 몸의 갯수가 늘어날 경우 맵은 더커져야 한다. 1. 맵을 재활용해서 플레이어의 이동방향에 맵을 재배치 경우 기본맵 세팅 최소한의 크기로 맵을 만들어주자  2. 플레이어의 이동방향에 따른 충돌처리 아래와 같이 플레이어 자식 오브젝트에 Area라는 오브젝트로 맵을 벗어났는지 충돌 체크 후 감지가 되면 그 방향에 맵을 재배치해주자   3. 맵재배치   2. 시작시부터 맵의 크기는 정해져있는 경우라면 그냥 맵을 만들어서 배치만 해주자 아래와 같이 맵을 만든 후 플레이어와 각종 아이템들을 맵 위에서 스폰해주자..

728x90