안녕 여러분!!!! 🙌🙌🙌
오늘은 소혜님과 함께 Teams로 제어권 주고 진행하는
Unity에 내장된 NetworkManager를 사용해서 다중 플레이어 만드는 시간!!!!!!!!!!!!!!!!!!
이 목적이었으나,, 살펴보니까 2019년 이후로 NetworkManager가 안되더라고요 ㅎㅎ,,
그래서!!! 다른 무료 에셋을 사용한
다중 플레이어 서버 제작? 지금부터 시작합니다~~~~
먼저
NetworkManager를 사용할 수 있는 무료 에셋 Mirror를 설치해줍니다!!!
다운로드 주소 👉 https://assetstore.unity.com/packages/tools/network/mirror-129321
Mirror | 네트워크 | Unity Asset Store
Get the Mirror package from vis2k and speed up your game development process. Find this & other 네트워크 options on the Unity Asset Store.
assetstore.unity.com
설치 후에는 간단합니다!!!
☝ 빈 오브젝트를 만들어서 NetworkManager, NetworkManagerHUD를 넣어줍니다!
이때 NetworkManagerHUD는 화면에 띄우기 위한 용도입니다!!
따라서 필요하지 않은 사람은 띄우지 않아도 돼요!
하지만, 저희는 테스팅 용도로 필요하기 때문에 (처음이니까)
사용했습니다!!
나중에는 HUD를 지우고 필요한 것만 띄우는 것이 목표!!
그렇다면 이제 뭘 하냐????????????!!!!!!!!!!!!!!
NetworkManager에 Player Prefab에 앞으로 만들어갈 Player( 👇 )를 프리팹으로 만들어 넣어주면,
자동으로 플레이어 연결 완료!!!!!!
✌ 원하는 모양의 Player를 만들어서 Network Identity와 Network Transform을 넣어줍니다!!
- 여기서 Network Identity 는 Identity 말 그대로, 해당 물체를 식별하기 위한 것입니다!!
이를 통해 네트워크 시스템이 object를 인식하게 됩니다!!!NetworkIdentity의 Server Only
여기서 Server Only는 Server에서만 Player를 보여준다는 뜻이므로 체크하지 않아야 합니다!!
만약 체크를 하게 되면 Client로 들어갔을 때 Player의 모습이 보이지 않습니다!!!
- Network Transform은 네트워크를 통해 Game Obejct의 Transform을 동기화시킵니다!!
Network Transform의 Authority
이때 Client Authority는 말 그대로, Client가 Object의 소유 권한을 가지고 있다는 말입니다!!
즉, Client가 Commands를 호출할 수 있고, Client가 서버에서 나가면 해당 Obejct도 함께 사라집니다!!!
When a client has authority over an object it means that they can call
Commands and that the object will automatically be destroyed when the client disconnects. - Mirror
🤷♀️🤷♂️
저희는 Player로 Capsule을 사용했는데,
그냥 마음 끌리는 대로 하심 됩니다~~
지면도 마찬가지로 임시로 Cube를 만들어서 했는데,
그냥 끌리는 대로 골라서 하시면 됩니다!!!!
Player - Rigidbody, Ground - Box Colider 잊지 마십쇼 ^_^
🤦♀️🤦♂️
Character Controller가 그냥 Play를 하다 보면 생겨나는데,,
이놈이 문젭니다 ㅎㅎㅎ,,,
Capsule Collider랑 겹쳐서 생기는 문제인데 Capsule Collider를 없애면 지면과의 충돌처리가 안되므로
그냥 Character Controller를 꺼주면 됩니다!!! ㅎㅅㅎ
🤟 마지막으로 Player에 들어갈 Moving scirpt만 넣어주면 끝!!!!!
그냥 간단하게 대충 뚝딱 만들어서 넣어줬습니다 ^_^
이 함수는 Update() 함수에 들어가 주면 됩니다!!!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;
using UnityEngine.SceneManagement;
public class PlayerController : NetworkBehaviour
{
[SerializeField] private float speed = 5.0f;
private void Update()
{
if (!hasAuthority)
return;
PlayerMove();
}
private void PlayerMove()
{
var horizontal = Input.GetAxis("Horizontal");
var vertical = Input.GetAxis("Vertical");
transform.Translate(new Vector3(horizontal, 0, vertical) * (speed * Time.deltaTime));
}
}
원래 NetworkBehaviour는 UnityEngine.Network에 있어야 하는데,
버전 업데이트와 함께 사라지면서 나오지 않습니다!!
그래서 그냥 Mirror를 사용해주면 NetworkBehaviour를 쓸 수 있습니다!!!!!!!
WOW!!!! Mirror 오픈소스로 공유해준 개발자 누구야!!!!!!!! 당신 멋있는 사람!!!!!!!!!!!! 👍👍👍👍👍👍
아무튼 그렇게 되면 👉👉
hasAuthority를 통해 자신의 것이 아닌 경우에는 통제할 수 없도록 할 수 있습니다!!!!
이로써 멀티 플레이어 Network Manger 사용해서 세팅하기 끝!!!!!!!!!!!!!
오늘은 여기까지~~~~~~
Character Controller 때문에 몇 시간을 날렸는지 몰라요 ㅋㅎㅋㅎ...
여러분들은 저희처럼 헤매지 않길 바라면서~~~~
.
.
.
.
그럼 안녕 !!!!!!!!!!!!!!!!!!!!!!!! 🙌🙌🙌🙌🙌🙌🙌
'프로젝트 > 2021-2022 포밍부스 프로젝트' 카테고리의 다른 글
[포밍부스] AWS IoT Core 사용해보기 2탄 - 사운드 인터렉션 (0) | 2022.04.16 |
---|---|
[포밍부스] AWS IoT Core 사용해보기 - 사운드 인터렉션 (0) | 2022.01.28 |
[포밍부스] WebGLSpeecySynthesis Asset 사용 후기 - 전화기 (0) | 2021.10.26 |
[포밍부스] 구글 CLOUD 가입하기 - 전화기 (0) | 2021.09.24 |