분류 전체보기 42

[Unity] Behavior Tree(BT)

간단한 AI는 FSM를 통해서 만들어왔습니다만 상태가 많아지고 조건이 추가될 수록 보기가 힘들었습니다. FSM의 경우엔 상태가 많지 않은 경우 유용하여 주로 사용했으나 팀 프로젝트에서 보스AI를 담당하면서 많은 상태를 가진 AI를 제작해야했습니다. 찾아본결과 AI의 많은 상태를 효율적으로 관리하기위해선 Behavior Tree를 사용하는 것이 좋다 판단, 보스 AI를 만들기 위해 BT를 직접 구현해 봤습니다. Behavior Tree는 게임 내 캐릭터와 몬스터, 보스에 대한 인공 지능(AI) 및 의사 결정 시스템을 만드는 데 널리 사용되는 디자인 패턴입니다. 행동 트리는 에이전트의 의사 결정 논리를 모델링하고 구성하는 시각적인 방법을 제공하므로 구조화된 모듈식 방식으로 복잡한 행동을 더 쉽게 설계할 수 ..

Unity 공부 2023.12.11

[Unity] FSM 유한 상태 기계

FSM: 유한 상태 기계(Finite-State Machine) 유한 상태 기계는 주어지는 모든 시간에서 처해 있을 수 있는 유한개의 상태를 가지고 주어진 입력에 따라 어떤 상태에서 다른 상태로 전환하거나 출력이나 액션이 일어나게 하는 장치 또는 장치를 나타낸 모델 상태(State): 게임에 정의된 여러 동작을 낸다 Idle, Walk, Run... 한 상태에서 다른 상태로 전이할 수 있고 동시에 여러 상태를 실행할 수 없다. 전이(Transition): 한 상태에서 다른 상태로 변화 하는것 각 상태 로직 또는 외부에서 전이 조건에 의해 전이될 수 있다. FSM을 간단하게 사용해 플레이어를 움직일 수 있게 하는 코드를 작성했습니다. 구현 코드 BaseState 모든 상태의 부모 클래스 public abs..

Unity 공부 2023.11.21

TCP / IP 계층 구조 3(네트워크 계층1)

관련 책: https://product.kyobobook.co.kr/detail/S000001792473 멀티플레이어 게임 프로그래밍 | 조슈아 글레이저 - 교보문고 멀티플레이어 게임 프로그래밍 | product.kyobobook.co.kr 이 책을 참고, 공부하여 서술하고 있습니다.! 네트워크 계층 네트워크 계층이 필요한 이유 MAC주소가 하드웨어에 각인되어 유연성이 떨어진다. 웹 서버를 열었는데 매일 수천 명의 사용자가 이더넷으로 방문한다고 하면, 링크 계층만 써서 서비스를 하게됬을때 서버에 접속하기 위해 이더넷 NIC장비의 MAC 주소를 사용자들이 알아야 한다. 과부하를 견디지 못하고 NIC카드가 고장났을 경우 새로운 NIC카드를 장착해야하는데 이럴 때의 MAC 주소는 이전과 다를테니 사용자는 더 ..

네트워크 공부 2023.11.13

[Unity Firestore] 데이터 읽기 쓰기

현재 진행중인 프로젝트에 사용할 파이어베이스를 배워보고있습니다. 설치방법은 넘어가며 간단하게 파이어스토어에서 값을 받고 쓸 수 있는 코드를 작성해보겠습니다. 작성 코드 using Firebase.Extensions; using Firebase.Firestore; using System.Collections.Generic; using UnityEngine; public class Datas : MonoBehaviour { FirebaseFirestore db; private void Start() { //FirebaseFirestore기본값의 인스턴스를 가져온다. db = FirebaseFirestore.DefaultInstance; ReadData(); WriteData(); } public void W..

Unity Firebase 2023.11.09

[Unity] 가중치 랜덤 뽑기

안녕하세요 이번에는 Unity에서 가중치 랜덤 뽑기 시스템을 만들어보고자 합니다. 먼저 간단한 가중치 랜덤 뽑기 시스템 클래스를 작성해봤습니다. 각 코드에 대한 설명은 주석을 달아놨습니다. using System.Collections.Generic; using UnityEngine; /// /// 가중치 랜덤 뽑기 시스템 클래스 /// public class WeightedRandom { public WeightedRandom() { _dic = new Dictionary(); } private Dictionary _dic; /// /// 가중치 리스트에 아이템과 수량을 추가함 /// public void Add(T item, int value) { //음수가 들어오면 리턴한다. if (value < 0..

Unity 공부 2023.11.05

[Unity] PC에 저장된 이미지 파일 불러오기

이전 게시글에서 부분캡쳐한 이미지를 PC에 저장했었는데요. 이번에는 저장한 이미지를 불러와 게임에 적용시켜보겠습니다. /// /// PhotoData 클래스의 정보로 PC에 저장된 PNG파일을 Image오브젝트의 이미지를 변환하는 함수 /// private void SetImageByPhotoData(PhotoData photoData) { if (photoData != null) { //파일이 저장된 위치와 파일이름을 붙여 저장 string path = photoData.PathFloder + photoData.FileName; //저장 위치에 있는 PNG파일을 읽어 Byte배열로 변환후 저장 byte[] bytes = File.ReadAllBytes(path); Texture2D tex = new T..

Unity 공부 2023.11.02

[Unity] 부분 화면 캡처 기능

안녕하세요. 이번엔 캡처 영역을 지정하여 캡처하는 방법에 대해 알아보겠습니다. 1. Canvas / UI / Image를 생성하여 캡처하고자 하는 영역에 배치합니다. 2. 하단의 스크립트를 작성 3. 스크립트를 오브젝트에 추가 4. 인스펙터 창에서 Canvas에는 메인 Canvas를, AreaImage에는 1번에서 생성한 이미지를 넣습니다. 5. 실행 using System.Collections; using System.IO; using UnityEngine; using UnityEngine.UI; public class CameraApplication : MonoBehaviour { [Tooltip("카메라 모드 활성/비활성")] [SerializeField] private bool _isActive;..

Unity 공부 2023.10.31

TCP / IP 계층 구조 2(물리, 링크 계층)

관련 책: https://product.kyobobook.co.kr/detail/S000001792473 멀티플레이어 게임 프로그래밍 | 조슈아 글레이저 - 교보문고 멀티플레이어 게임 프로그래밍 | product.kyobobook.co.kr 이 책을 참고, 공부하여 서술하고 있습니다.! 물리 계층 책에선 물리 계층은 전자기학과 관련되어있다고 하여 자세히 설명은 하지 않았습니다. 물리 계층 이란? 계층 구조 최하단에 있으며 가장 기본적인 하드웨어 전송을 지원하는 계층 네트워크로 연결된 컴퓨터, 즉 호스트 사이의 물리적 연결을 책임짐 - 물리적으로 연결된 매체가 있어야 정보를 주고 받을수 있다. TP CAT-6 케이블, 전화선, 동축 케이블, 광섬유 케이블 등이 물리계층에서 연결에 이용하는 매체의 예 이다...

네트워크 공부 2023.10.27

TCP / IP 계층 구조 1(특징)

안녕하세요. 이번에는 멀티 플레이가 지원되는 Unity 게임을 제작하기에 앞서 네트워크에 관한 지식이 부족한 것 같아 네트워크 공부를 시작했습니다. 공부를 하기 위해 "멀티플레이어 게임 프로그래밍" 책을 구매하여 책을 통해 이해한 정보들을 올려볼까 합니다. 관련 책: https://product.kyobobook.co.kr/detail/S000001792473 멀티플레이어 게임 프로그래밍 | 조슈아 글레이저 - 교보문고 멀티플레이어 게임 프로그래밍 | product.kyobobook.co.kr TCP / IP 계층 TCP/IP 계층은, TCP/IP 프로토콜 통신 과정에 초점을 맞추어, OSI 7계층을 좀 더 단순화 시킨 계층을 의미 책에서 말하는 TCP / IP 계층 링크 계층의 구현물과 물리 계층의 연..

네트워크 공부 2023.10.24

[Unity Photon] 공부 3(게임 씬)

이번에는 플레이어들이 플레이하는 여러 씬들을 생성해보는 것에 대해 공부해볼까 합니다. 정보 출처 https://doc.photonengine.com/ko-kr/pun/current/demos-and-tutorials/pun-basics-tutorial/game-scenes https://doc.photonengine.com/ko-kr/pun/current/demos-and-tutorials/pun-basics-tutorial/gamemanager-levels 경기장 씬 생성 1. 새로운 씬을 생성하여 정확하게 "Room for 1"로 저장 2. UI/text를 생성하여 텍스트의 내용을 "Room for 1"로 변경 3. UI/Button을 생성하고 텍스트의 내용을 "Leave Game"으로 변경 4. 빈..

Photon Engine 2023.10.24