포트폴리오용 1인 게임 개발 프로젝트를 시작했습니다.학원에서의 마지막 작업일 듯합니다.작업 기한은 ~2024.10.04 입니다.주제는 창작 카드게임입니다.4명이서 플레이할 수 있도록 네트워크 통신까지 추가할 계획입니다. 그런데 카드 게임이란게 비주얼적인 부분이 빈약해서 다른 게임에 비해 초라하다고 생각하고 있습니다...그에 비해 다른 학생들은 애니메이션이나 쉐이더의 재미에 쏙 빠진것 같아 보이는데,과연 로직이라도 훌륭하게 완성하여 내실이라도 튼튼한 프로젝트가 될지 걱정입니다... 기능정의서Unity의 Mirror 라이브러리를 사용하여 4인 멀티 카드 게임을 제작합니다.4명의 플레이어가 모일 때까지 대기합니다. 필요한 인원이 모이면 게임을 시작할 수 있습니다.NetworkRoomManager를 활용하여 로..
NetworkRoomManager에서 Start Host나 Start Client를 실행하면Offline Scene에서 Online Scene으로 이동합니다.이후에 벌어지는 일을 정리해봅니다. Online Scene으로 이동하면 NetworkRoomPlayer 객체가 생성됩니다.객체의 Start 구문에서 DontDestroyOnLoad(gameObject)가 실행됩니다. 그리고 싱글톤이 된 NetworkRoomManager의 RoomSlots에 자신을 추가합니다. RoomSlots은 NetworkRoomPlayer형 HashSet입니다.( HashSet : 중복 값을 허용하지 않는 고유한 값의 컬렉션)NetworkRoomManager의 RoomSlots을 조회하면 원하는 플레이어를 호출할 수 있겠습니다..
이제 잔상을 남길 수 있습니다. SkinnedMeshRenderer의 BakeMesh 메서드만 이해한다면 누구나 잔상을 만들 수 있습니다. 현재 SkinnedMeshRenderer가 참조하는 Mesh의 모습을 그대로 복제하여,매개변수의 Mesh mesh에 할당하는 식인가 봅니다. 이 작동 원리를 이해했다면 구현 방식을 쉽게 생각 해볼 수 있습니다.바로 잔상의 Mesh를 가진 객체를 계속 생성하는 것입니다. 1. 잔상을 남기고 싶은 순간마다 객체를 생성합니다. 객체에는 Mesh Filter와 Mesh Renderer가 필요하겠습니다.2. Mesh Filter에는 아까의 BakeMesh 메서드로 복제한 메쉬를, Mesh Renderer에는 복제한 메쉬가 사용할 Material을 할당합니다.3. 시간이 지나면..
오목 검출 알고리즘을 생각하던 중에문득 RaycastAll로 검출된 RaycastHit 배열의 요소가Ray의 시작점으로부터 가까운 순으로 반환되는지 궁금해져서 실험해 봤다. 생각대로 될 리가 없지 ㅋㅋㅋ 혹시나 했던 역시나, 뒤죽박죽으로 배열에 담겨 반환되었다. 그럼 거리 순으로 정렬하면 어떨까? System.Array.Sort(hits, (hit1, hit2) => hit1.distance.CompareTo(hit2.distance)); List를 사용할 때 Sort를 그저 오름차순 정렬에만 사용해서 몰랐는데,System.Array.Sort는 람다함수와 병행하면정렬할 수 없는 사용자 정의 객체를비교 메서드를 사용하여 기준에 따라 정렬할 수 있다. 7개의 큐브가 거리 순으로 정렬되었다. 이것이 Arr..
[SyncVar]라는 Attribute가 있습니다.이 어트리뷰트를 추가한 기본 데이터형(int, float, string...)의 변수는네트워크 상에서 동기화됩니다.(+추가) 다만, Server에서 Spawn을 통해 생성된 네트워크 객체에서만 작동합니다.[SyncVar]가 추가된 변수가 서버에서 변경될 때만 동기화 작업이 이루어집니다.[Command]나 [Server] 어트리뷰트가 추가된 메서드에서 그 변수가 변경되면 되겠습니다.물론 모든 클라이언트의 같은 인스턴스에서만 일어나는 일이겠습니다.같은 인스턴스로 식별되기 위해선 NetworkIdentity가 필요할 것입니다.여기서 값만 변경되면 심심하니 값이 바뀔 때 자동으로 호출되는 메서드도 설정할 수 있습니다.[Hook] 어트리뷰트에 그 메서드를 추가하면..
서버(Server) 측 콜백 메서드 순서Awake (Unity의 MonoBehaviour 메서드)네트워크 관리자를 초기화할 때 사용됩니다.Start (Unity의 MonoBehaviour 메서드)네트워크 관리자가 시작될 때 사용됩니다.OnStartServer서버가 시작되었을 때 호출됩니다. 서버 초기화 작업을 수행하는 데 사용됩니다.일반적으로 네트워크를 시작한 후 서버 준비 작업을 수행합니다.OnServerConnect(NetworkConnectionToClient conn)클라이언트가 서버에 처음 연결될 때 호출됩니다.클라이언트의 연결을 허용할지 또는 거부할지 결정할 수 있습니다.OnServerAddPlayer(NetworkConnectionToClient conn)새 클라이언트가 연결된 후, 해당 클..
NetworkRoomPlayer를 상속받는 클래스를 만든 후 Start를 사용하려고 하였다.당연히 Override를 하면 되겠거니 했는데 virtual 단에서 코드가 꽤 작성되어 있었다. public virtual void Start() { if (NetworkManager.singleton is NetworkRoomManager room) { // NetworkRoomPlayer object must be set to DontDestroyOnLoad along with NetworkRoomManager // in server and all clients, otherwise it will..
이제부터 다산다난했던 퍼즐게임 제작기를 작성합니다... 마지막 챕터 '집으로...' 는사냥을 마친 사냥꾼이 멍청하고 게으른 말과 함께집으로 돌아간다는 내용의 게임입니다. 언레일드와, 닌텐도 스위치의 월드와이즈 51이라는 게임에 수록된 슬라이딩 퍼즐을 참고하여 기획하였습니다. 크게 보면 슬라이딩 퍼즐과 차이가 없지만나름의 차별 요소를 두기 위해언레일드의 작업 요소를 조금 추가하였습니다.플레이어 캐릭터를 조작하고 이동하여 맵을 수정하고장애물을 제거하는 작업들 말입니다.8. 게임 설명게임의 목표는 단순합니다. 도로를 따라 이동하는 말이 집까지 갈 수 있도록도로 퍼즐을 연결해 길을 완성하는 것입니다. 말은 길을 따라 스스로 천천히 이동합니다.플레이어는 말이 계속해서 앞으로 나아갈 수 있게도로 퍼즐을 이어나가야 ..