이제 잔상을 남길 수 있습니다. 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. 게임 설명게임의 목표는 단순합니다. 도로를 따라 이동하는 말이 집까지 갈 수 있도록도로 퍼즐을 연결해 길을 완성하는 것입니다. 말은 길을 따라 스스로 천천히 이동합니다.플레이어는 말이 계속해서 앞으로 나아갈 수 있게도로 퍼즐을 이어나가야 ..
학원의 유니티 수업은 유니티를 배워본 누구나 한 번씩은 다 해볼 법한 프로젝트로 진행되었습니다.플랫포머 러닝액션을 통해 오브젝트 풀링을 배우고서바이벌 슈팅 게임으로 레이캐스트와 클래스, 인터페이스 상속을 익혔습니다.그리고 간단한 리듬 게임을 만들기도 했습니다.게임을 만드는 데 익숙하지 않은 팀원들에게다음에 있을 중요한 팀과제를 위해이번 프로젝트를 복습과 연습의 기회가 되었으면 했습니다. 5. 네 개의 게임정해진 스토리를 기반으로 게임을 네 개의 챕터로 나누고 각 챕터마다 각기 다른 게임을 만들기로 하였습니다.앞서 말한 바와 같이 슈팅 게임과 리듬게임, 러닝 액션 게임과 퍼즐 게임을 기획하였고본인은 마지막 챕터의 퍼즐 게임을 제작하기로 하였습니다.Chapter 1. (보우 슈팅 게임) '더 라스트 헌트' ..
1. 시작...6월, 유니티 수업을 시작하고 1개월...두 번째 팀 작업을 시작했습니다.유니티를 처음 접하는 팀원들에겐커리큘럼은 분명 성급한 느낌이지만하루빨리 성장해야 할 시기임은 분명하기에목표를 잡고 마감 안에 반드시 완성한다는 각오로 작업하였습니다. 작업 기간은 2024.07.08 ~ 2024.07.31입니다. 시리즈로 나누어 개발 일지를 뒤늦게나마 작성합니다. 2. 주제학원의 두 번째 팀프로젝트였습니다. 첫 프로젝트 때는 모두가 처음이고 미숙하였기에체력적으로도, 특히 감정적으로도 소모가 너무 컸습니다.본인 또한 팀 작업이 처음이었고팀장이라는 자리를 맡아 책임감에 대한 압박이 너무 크다 보니일 배분에 실패하고 게임의 태반을, 거의 90%를 혼자 작업을 해버렸습니다.그러다 보니 '이게 팀 작업이라고 ..