학원에서 다른 학생을 볼때Raycast가 안 된다며 몇 시간을 붙잡고 보면LayerMask 설정을 잘못한 경우가 꽤나 많습니다. 직접 LayerMask 변수를 만들어 사용하면 괜찮긴한데,변수 하나 만드는 것과 Inspector에서 직접 설정 해야한다는 점이 개운하지 못합니다. LayerMask mask = 1 그렇다면 방법은 NameToLayer( )라는 메서드를 사용하고비트 연산을 하는 것인데,학원에서 배울정도면 비트 연산에 대해 낯설수 있습니다. 그것을 쉽게 해줄 방법은 아니지만,Raycast가 어떤 int형 매개변수를LayerMask 설정으로 사용하는 원리? 방법을 알게되면인상깊어서 앞으로의 실수는 없지 않을까 생각해봤습니다.using UnityEngine;public class RaycastTes..
Photon을 사용하여 매치메이킹을 구현하면서Room List를 보여줄 방법으로 Scroll View를 사용하기로 하였습니다.Scroll View, 별거 없을거라 생각하고 기회되면 한 번 쓰지... 하는 생각으로 미뤄두다가처음 사용하게 되었는데 꽤 쓸만한거 같습니다.깊게 고민하고 사용하지 않아서 그럴지도 모르지만간단하게나마 사용법에 대해 정리하려고 합니다. Canvas 생성은 생략하고,Scroll View를 만들게 되면 이런 식으로 생성됩니다. 최상위 객체인 Scroll View에는 Scroll Rect 컴포넌트가 있습니다. 이름만 보아도 기능에 대해 충분히 유추 가능한 것 같습니다. 먼저 두 bool 값에 대해 보면 체크한 축으로 스크롤이 가능합니다.체크를 해제하면 해당 축으로는 스크롤을 할 수 없습니..
우선 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..
1. Hand (손, 패)Hand는 말 그대로 플레이어의 손을 의미합니다.원래는 손에 들고 있는 카드를 의미하지만List로 손에 들고 있는 Card 오브젝트를 관리하는 class입니다. [SerializeField] List list = new List();인스펙터에서 확인할 수 있도록 어트리뷰트를 추가했습니다. public int[] AllIDs { get { int[] ids = new int[list.Count]; for (int i = 0; i 여차하면 카드 목록을 전달할 수 있게,특히 카드의 ID를 전달하기 위해 int 배열 함수를 준비했습니다.null에 대한 예외 처리가 필요할 수 있습니다. public ..
1. 덱과 카드 관리먼저 Mirror에서Command나 ClientRpc 등의 속성을 가진 메서드를 사용할 때class의 인스턴스를 매개변수로 전달할 수 없습니다.기본적으로 직렬화 가능한 기본 자료형(int, float, string, bool)만 주고 받을 수 있기 때문입니다.대신 카드 오브젝트를 int 형 ID로 주고받을 수 있습니다. using UnityEngine;public class Card : MonoBehaviour{ // 카드의 고유 ID (외부에서 수정 불가, 읽기 전용) public int Id { get; private set; } // 카드의 이름 public string cardName; // 카드 ID를 설정할 수 있는 초기화 메서드 public..
1. 특정 인원을 만족하면 게임을 시작하기Unity Mirror 라이브러리를 사용하여 멀티 플레이 환경을 제작하고 있습니다.NetworkManager를 사용하여 Game Scene에서 4명의 플레이어가 접속하면 게임이 시작되게 할 것입니다. GameManager에서 생성된 플레이어의 수를 int 값으로 기록하고 저장합니다.플레이어 객체가 생성되면 Start() 메서드로 GameManager의 int 값을 +1 합니다.그리고 그 수가 4가 된다면 게임을 시작하기 위한 메서드를 실행합니다.using UnityEngine;using Mirror;public class GameManager : NetworkBehaviour{ // 접속된 플레이어 수를 서버에서 관리하기 위한 네트워크 동기화된 변수 [..