목록프로젝트/유니티 (11)
cyphen156

항상 모든 몬스터의 인공지능을 개발자가 코딩할 수는 없다. 그래서 유니티에서는 길찾기 알고리즘을 개발하는 시간을 단축할 AI Navigation이라는 레지스트리 패키지를 제공하고 있다.그리고 AI가 돌아다닐 수 있도록 Plain에 NavMesh Surface 컴포넌트를 달아준다.여러가지 옵션들이 있지만 주의깊게 봐야 할 것은 Agent Type과 Default Area이다.어떠한 형태의 오브젝트가 어느 부분을 활용하여 이동할지를 결정하는 것이기 때문에 항상 이것을 실제 AI오브젝트에 달린 컴포넌트와 맞춰 주어야 한다.AI를 통해 제어할 오브젝트에 Nav Mesh Agent컴포넌트와 제어 스크립트를 부착해준다.Using문using UnityEngine.AI;using Unity.AI.Navigation;..

캐릭터를 한개 집어넣었는데 사망 모션 등 상하체, 팔 다리 등을 분리하여 제어하고 싶을 때가 있다. 그럴때 쓰는게 애니메이션에 있는 아바타 마스크이다.아바타 마스크는 다음과 같이 만들어서 개별 컨트롤러를 생성하는 것이다. 그리고 나서 코드에서 다음과 같이 레이어에 대한 가중값을 제어 할 수 있다. animator.SetLayerWeight(1, 1);그러고 나면 다음과 같이 플레이어 애니메이션이 재생된다.

유니티에서는 애니메이션 클립에 이벤트를 추가하여 특정 프레임중에 함수를 실행할 수 있다.가령 걷는 이벤트 중에 발소리가 나야 한다고 했을 때 다음과 같이 코드를 추가하고 이벤트를 통해 함수를 실행할 수 있다.PlayWeaponChangeSound{ if (audioClipWeaponChange != null) { audioSource.PlayOneShot(audioClipWeaponChange); }}이렇게 연결해주면 15번 프레임이 재생될 때 마다 사운드가 재생된다.

※ 공부하는 도중에 작성된 글입니다. 처음부터 설명하는 내용이 아니니 적당히 걸러서 보세요. ※※ 그냥 이런 흐름으로 애니메이션을 작업하는구나 정도로만 받아들여주세요※ 유니티에서 2D 게임을 만들때 가장 중요한 작업들 중 하나가 애니메이션을 만드는 것이다.먼저 여러 개의 스프라이트 이미지가 필요하다.가장 먼저 설정할 것은 이미지들의 피벗과 스프라이트 모드를 설정하는 것이다. 만약 이 피벗 위치가 달라진다면 애니메이션의 재생 위치도 달라질 것이기 때문에 애니메이션을 구성하는 모든 스프라이트 들은 같은 피벗 위치와 모드를 가지고 있어야 한다.피벗과 모드를 전부 설정했다면 다음과 같이 프로젝트 윈도우 아무데나 이미지들을 드래그 하면 유니티 엔진이 자동으로 애니메이션을 만들어 준다.애니메이션 자동 생성 기능 사..

유니티에는 애셋들을 번들링해서 제공할 수 있도록 할 수 있다. 에디터를 수정하여 직접 메뉴창을 만들수도 있다.이거 어디다가 쓰냐 하면 실행파일(apk)의 크기를 줄이고 추가 리소스는 애셋 번들의 형태로 제공함으로써 초기 프로젝트의 용량을 줄이고, 애셋을 다른곳에도 사용할 수 있도록 유연성과 확장성을 확보하는데 있다.우선 Asset폴더 내부에 Editor 폴더를 만들고, 여기에 스크립트를 하나 생성한다.그러고 나면 다음과 같이 메뉴창을 하나 생성할 수 있다.애셋 패키지를 등록하려면 프리펩과 같은 파일들을 다음과 같이 작업하면 등록된다.그리고 나서 다음과 같이 코드를 수정하고AssetBundleBuilder.csusing System.IO;using System.Collections;using UnityEn..

돈스타브 하다가 하기싫어져서 뛰쳐나온 프로젝트확실히 글쓰면서 공부하면 조금 더 집중을 오래하는것 같다.간단하게 애셋 스튜디오로 리소스 추출하고 프로젝트 모작으로 만들것 같다.맨 처음 유니티6 2D Core(URP)프로젝트를 생성하면 현재 다음과 같은 경고가 발생한다.→ 24.12.16 수정Unity6 0.31f1버전 기준 이제는 안뜨는 에러다 The project currently uses the compatibility mode where the Render Graph API is disabled. Support for this mode will be removed in future Unity versions. Migrate existing ScriptableRenderPasses to the new ..

유니티는 기본적으로 C# 소스 파일을 오브젝트의 컴포넌트로 활용할 수 있다. 무슨 말이냐 하면 유니티를 사용하는 게임 개발자는 전체 시스템에 대한 구조를 고민할 필요 없이 하위 컨텐츠만을 생각하면 된다는 이야기이다. 특이하게 유니티는 전통적으로 프로젝트의 진입점을 정의하는 main파일을 제공하지 않는다. 대신 엔진내부에서 MonoBehaviour 클래스를 통해 게임 오브젝트의 컴포넌트를 제어한다. 유니티는 다양한 샘플 스크립트들을 제공하는데 가장 많이 쓰이는 것은 MonoBehaviour 스크립트이다.MonoBehaviour 클래스는 다른 모든 유니티에서의 동작 클래스들을 상속하고 있는 클래스로 가장 범용적으로 사용되기 때문이다. 프로젝트 창에서 샘플용 MonoBehaviour C#스크립트를 생성해보면 ..

레벨 디자인이라 함은 씬 하나를 기준을 삼아 게임 플레이에 필요한 리소스들을 모두 저장소에서 메모리로 가져오기 위한 일종의 프로젝트 패키징 이라고 볼 수 있다.다른말로는 맵이라고도 불리고 있으며, 게임을 진행할 때 로딩중...이라고 뜰 경우가 레벨 디자인(씬 또는 맵)이 변경되어 메모리에 적재되어가는 과정이라고 할 수 있다. 레벨 디자인에 포함되는 것은 씬 내의 지형, NPC와 같은 인스턴스들, 캐릭터 오브젝트들 그리고 UI와 같은 플레이할 때 사용자의 경험에 직 간접적으로 적용되는 모든것들에 대한 디자인을 포괄한다. 에셋 스토어 사용법에 대한 것은 이전 포스팅에서 다뤘으니 오늘은 에셋의 이름 정도만을 언급하고 넘어가겠다.이전과는 다르게 3D Core(URP)프로젝트를 levelDesign이라는 이름으로..