우선 Sequence는 단일 객체가 아닌,다수의 객체에 대한 여러 트윈을 하나로 묶고등록한 순서대로 트윈을 재생하기 위해 사용합니다. Sequence sequence;Sequence는 변수 선언 시 null 상태입니다. sequence = DOTween.Sequence(); static으로 선언된 생성자가 있습니다.이 생성자를 통해 Sequence를 만듭니다. 시퀀스는 생성 즉시 자동으로 재생됩니다. sequence = DOTween.Sequence().Play();Play()를 사용해 시퀀스를 재생할 수 있지만 자동 재생입니다. sequence = DOTween.Sequence().Pause();이를 원치 않으면 트윈을 추가하면서 동시에 재생을 중단해야 합..
0. 코드전문using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using DG.Tweening;[RequireComponent(typeof(Canvas))]public class InfoUIController : MonoBehaviour{ readonly Queue infoUIs = new Queue(); public Image prefab; Image currentInfo = null; [SerializeField, Header("시작 위치")] RectTransform startPosition; [SerializeField, Header("목표 위치")] RectTransform tar..
0. 코드 전문123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166..
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)새 클라이언트가 연결된 후, 해당 클..