UNITY/크레이지아케이드 모작 14

유니티 파이어베이스 연동

firebase를 이용해서 로그인 기능을 구현해 볼 예정이다. 비밀번호의 Content Type 은 패스워드로 바꿔준다.import 한다. 인증에서 이메일/비밀번호를 추가한다. public void Create(){ auth.CreateUserWithEmailAndPasswordAsync(email.text, password.text).ContinueWithOnMainThread(task=> { if(task.IsCanceled) { Debug.Log("회원가입 취소"); } if(task.IsFaulted) { Debug.Log("회원가입 실패"); } ..

동기화

기본 로직 구현을 마친 후, 플레이어에게 최적의 경험을 제공하기 위한 동기화 방안에 대해 고민해보았다.우선, 물풍선 생성은 생성한 클라이언트에서 직접 수행하도록 설정했다. 초기에는 마스터 클라이언트가 물풍선을 생성하도록 했으나, 생성한 클라이언트에서 물풍선이 늦게 생성되는 문제가 발생했다. 이로 인해 게임의 몰입도가 떨어졌기 때문에, 각 클라이언트가 자신의 측에서 물풍선을 생성하도록 변경했다.물풍선의 움직임은 생성한 클라이언트가 전적으로 제어하도록 하여, 화면 상의 반응 속도를 개선했다. 초기 설계에서는 마스터 클라이언트가 일반 클라이언트로부터 물풍선의 좌표를 받아 생성하고, 모든 움직임을 관리하도록 했으나, 이는 부드러운 경험을 제공하는 데 한계가 있었다. 일반 클라이언트가 물풍선을 생성하고 이를 제어..

물풍선 로직 수정

물풍선 로직을 수정하였다. 처음에는 여러 개의 물풍선을 배치하여 한 번에 터지도록 구성하였으나, 블록 앞에 여러 개의 물풍선이 위치할 경우 블록이 동시에 여러 개가 터지는 문제가 발생했다.   블록을 어떻게 하면 하나만 사라지게 할 수 있을까?? 블록을 하나만 제거하기 위해 재귀 함수를 사용했다. using UnityEngine;using System.Collections;using Photon.Pun;public class Balloon : MonoBehaviourPun{ public int power; public GameObject waterStreamPrefab; public GameObject center; public GameObject left; public Gam..

멀티플레이 구현

멀티플레이 구현이 어느 정도 완성되었다.  우선 방을 들어오면서 public override void OnJoinedRoom() { PhotonNetwork.Instantiate("Player", new Vector3(0, 4, 0), Quaternion.identity); }플레이어 객체를 만든다. 만약 자기가 플레이어 객체의 주인이면 if(PV.IsMine){ gameObject.transform.GetChild(0).gameObject.SetActive(true);}else{ gameObject.transform.GetChild(0).gameObject.SetActive(false);}화살표 오브젝트를 활성화한다.  플레이어 객체의 움직임은 Photon Transform View와..

싱글 모드 구현

-물줄기 구현물풍선 설치 3초 후 물줄기가 터지는 것을 구현해 보았다. 물줄기 각각의 프리팹을 생성한다.물풍선이 터질 때 power에 맞게 물줄기의 길이를 조절한다.private void CreateWaterStream()//상 하 좌 우로 물줄기 생성{ Instantiate(center, transform.position, Quaternion.identity); CreateStream(Vector3.right, right, rightE); CreateStream(Vector3.left, left, leftE); CreateStream(Vector3.down, down, downE); CreateStream(Vector3.up, up, upE);}private void Crea..

TileMap

맵을 어떻게 그릴까 고민해 봤는데 Tilemap이라는 게 있어서 사용해 보기로 했다.  이렇게 간단하게 그리는 게 가능하다..그리고 Tile에도 콜라이더가 있다.void PlaceBalloon(){ Vector3Int cellPosition = tilemap.WorldToCell(transform.position); // 플레이어의 현재 위치를 셀 좌표로 변환 Vector3 cellCenterPosition = tilemap.GetCellCenterWorld(cellPosition); // 현재 셀 좌표에 해당하는 타일의 중심점을 계산 Instantiate(Balloon, cellCenterPosition, Quaternion.identity); // 물풍선을 셀 중앙에 생성} tilem..

캐릭터 움직임 구현

오늘은 간단하게 캐릭터 움직을 구현함. 각 방향별로 멈추는 모습이 다르기 때문에 Idle을 4개를 만들었다. 벽 충돌은 collider는 모두 가지고 있고 rigidbody2D를 한 객체가 가지고 있어야 적용됨. 중력은 필요 없기 때문에 scale 0으로 설정.Freeze Rotation Z축은 사용안함. Idle_Down을 디폴트로 설정.using UnityEngine;public class PlayerController : MonoBehaviour{ public float speed = 3.0f; private Animator animator; public string idleLeftAnime = "IdleLeft"; public string idleRightAnime = "Id..

방 구현(Ready)

오늘은 슬롯의 캐릭터 이미지와 준비BTN, 시작BTN 등을 구현하였다.  방 정보는 RPC를 통해 마스터 클라이언트가 새로운 클라이언트에게 전달하는 방식으로 처리했다.( CustomRoomProperties에 대해서도 차근차근 익혀나가야겠다. ) 이렇게 캐릭터 슬롯을 닫으면 남는 자리에 새로운 플레이어가 들어오게 된다.(방장만 슬롯 컨트롤 가능)public void CharactorSlotClick(int num){ if(PhotonNetwork.IsMasterClient) { PV.RPC("ChangeCharactorSlot", RpcTarget.All,num);//빈칸 번호를 넘김 } }[PunRPC]public void ChangeCharactorSlot(int num)..