유니티 멀티 | 기말과제로 멀티 마인크래프트 만들어서 A+ 받기 인기 답변 업데이트

당신은 주제를 찾고 있습니까 “유니티 멀티 – 기말과제로 멀티 마인크래프트 만들어서 A+ 받기“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 윤농 Yunnong 이(가) 작성한 기사에는 조회수 8,790회 및 좋아요 118개 개의 좋아요가 있습니다.

유니티 멀티 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 기말과제로 멀티 마인크래프트 만들어서 A+ 받기 – 유니티 멀티 주제에 대한 세부정보를 참조하세요

\”네트워크프로그래밍\” 강의의 기말 프로젝트 과제로 마인크래프트를 만들어서 A+을 받았습니다.
게임은 Unity로 만들었고, 서버는 TCP, UDP를 사용해서 만들었습니다.
게임을 만들면서 참고한 튜토리얼은 아래 링크를 통해 확인할 수 있습니다.
https://www.youtube.com/watch?v=uh8XaC0Y5MA
참고로 여러가지 이유로 게임 배포는 하지 않을 예정입니다.
다음에 더 재미있는 게임개발일지로 돌아오겠습니다.
#마인크래프트 #유니티 #게임개발

유니티 멀티 주제에 대한 자세한 내용은 여기를 참조하세요.

유니티를 사용하여 Tank War 멀티플레이 게임 만들기(1)

World of Tank와 같은 멀티플레이 탱크 전투게임을 제작해보았다. 멀티플레이를 위해 Photon Cloud를 도입했다. … 유니티에서 다중접속 게임을 개발하기 …

+ 여기에 자세히 보기

Source: seongju0007.tistory.com

Date Published: 9/24/2022

View: 4803

[유니티] 유니티 멀티플레이 – 간단한 멀티플레이 예제 설명

특정한 문제들 및 동기화와 각기 다른 기기와 위치에 따른 커뮤니케이팅에 관련된 어려움 등이 있습니다. 유니티에 내장된 멀티 네트워킹과 이와 관련된 …

+ 여기를 클릭

Source: blog.naver.com

Date Published: 8/9/2022

View: 9175

유니티를 이용하여 온라인 게임 만들기 – (1/2)

이번 튜토리얼에서는 유니티 네트워크 기능을 사용하여, 어떻게 다중 플레이어 게임을 구현하는지 알아볼 것이다. 우리는 이전에 온라인 게임을 …

+ 더 읽기

Source: unityindepth.tistory.com

Date Published: 11/29/2021

View: 8149

유니티(게임 엔진) – 나무위키

초기 유니티 엔진은 멀티플랫폼 중 하나로 브라우저 역시 주력 지원했고, ‘유니티 웹 플레이어’라는 이름으로 현재까지 남아 있다.

+ 더 읽기

Source: namu.wiki

Date Published: 11/7/2021

View: 8923

주제와 관련된 이미지 유니티 멀티

주제와 관련된 더 많은 사진을 참조하십시오 기말과제로 멀티 마인크래프트 만들어서 A+ 받기. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

기말과제로 멀티 마인크래프트 만들어서 A+ 받기
기말과제로 멀티 마인크래프트 만들어서 A+ 받기

주제에 대한 기사 평가 유니티 멀티

  • Author: 윤농 Yunnong
  • Views: 조회수 8,790회
  • Likes: 좋아요 118개
  • Date Published: 2021. 7. 3.
  • Video Url link: https://www.youtube.com/watch?v=9i4mW138-zI

유니티를 사용하여 Tank War 멀티플레이 게임 만들기(1)

반응형

World of Tank와 같은 멀티플레이 탱크 전투게임을 제작해보았다. 멀티플레이를 위해 Photon Cloud를 도입했다.

https://www.photonengine.com/en-US/Photon

유니티에서 다중접속 게임을 개발하기 위해서는 멀티형 게임 전용 클라우드인 Photon을 사용한다. 아이디 생성 후 Create New app을 통해 주소를 생성해 주면 된다.

https://assetstore.unity.com/packages/tools/network/pun-2-free-119922

애셋 스토에서 Photon PUN2 무료애셋을 받아 유니티에 설치해주면 된다. 임포트 후 SetUp 창이 뜨는데 거기에 생성한 주소를 넣고 Set Up Project을 해주면 기본적인 세팅이 완성된다. 포톤 클라우드에서 생성한 주소를 통해 게임을 만들고 플레이어들이 해당 게임에 접속하여 클라우드에서 플레이 환경을 공유하는 개념으로 이해하면 된다.

플레이어가 조종하게 될 탱크 오브젝트는 다음과 같이 구성되어 있다. Track은 바퀴 궤도를, Turret은 포신이 연결된 상단 부분이며, Turret의 자식인 TurretMesh는 상부 몸통, Cannon은 포신이다.

1) 탱크 이동

using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; using UnityStandardAssets.Utility; public class TankMove : MonoBehaviour { //탱크의 이동과 속도 public float moveSpeed = 20.0f; public float rotSpeed = 50.0f; //참조할 컴포넌트 private Rigidbody rbody; private Transform tr; //키보드 입력값 변수 private float h, v; private PhotonView pv = null; //포톤뷰 컴포넌트 public Transform camPivot; //메인 카메라가 추적할 CamPovot 게임 오브젝트 // Start is called before the first frame update void Start() { rbody = GetComponent(); tr = GetComponent(); rbody.centerOfMass = new Vector3(0.0f, -0.5f, 0.0f); //Rigidbody의 무게 중심을 낮게 설정 pv = GetComponent(); if (pv.IsMine) //로컬이라면 { Camera.main.GetComponent().target = camPivot; rbody.centerOfMass = new Vector3(0.0f, -0.5f, 0.0f); } else //원격 플레이어의 탱크는 물리력을 이용하지 않음 { rbody.isKinematic = true; } } // Update is called once per frame void Update() { if (!pv.IsMine) return; //로컬이 아니라면 Update함수 실행 x h = Input.GetAxis(“Horizontal”); v = Input.GetAxis(“Vertical”); //회전과 이동 처리 tr.Rotate(Vector3.up * rotSpeed * h * Time.deltaTime); tr.Translate(Vector3.forward * v * moveSpeed * Time.deltaTime); } }

탱크 이동에 관한 기본적인 함수이다. 오브젝트 Mass를 2000으로 변경하여 이동 시 탱크다운 묵직함을 느낄 수 있도록 설정했다. 그리고 Start() 함수 중간 if else 조건문은 멀티플레이 시 다른 플레이어의 이동 조작에 영향을 받지 않도록 설정한 함수이다. 실제 멀티플레어 환경에서 다른 플레이어가 조작하면 내 탱크까지 조작되는 영향을 받는데 ‘이동’ 부분에서는 서로 영향을 받지 않고 각각 조작할 수 있도록 하였다.

2)카메라 세팅

카메라 시점은 플레이어가 탱크 위에서 바라보는 시점으로 설정해주기 위해서 CamPivot이라는 빈 오브젝트를 생성해주었다. CamPivot을 적당한 위치에 이동시킨 후 TankMove와 매핑해주면 된다. 그리고 마찬가지로 Photon Cloud에서 각각의 플레이어마다 시점을 맞춰주기 위해 Photon view와 Photon Transform View 컴포넌트를 추가해주었다. Observed Components에서 Tank의 Transform을 그대로 드래그앤 드롭해주어 연결해주면 된다.

using UnityEngine; namespace UnityStandardAssets.Utility { public class SmoothFollow : MonoBehaviour { // The target we are following [SerializeField] public Transform target; // The distance in the x-z plane to the target [SerializeField] private float distance = 10.0f; // the height we want the camera to be above the target [SerializeField] private float height = 5.0f; [SerializeField] private float rotationDamping; [SerializeField] private float heightDamping; // Use this for initialization void Start() { } // Update is called once per frame void LateUpdate() { // Early out if we don’t have a target if (!target) return; // Calculate the current rotation angles var wantedRotationAngle = target.eulerAngles.y; var wantedHeight = target.position.y + height; var currentRotationAngle = transform.eulerAngles.y; var currentHeight = transform.position.y; // Damp the rotation around the y-axis currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime); // Damp the height currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime); // Convert the angle into a rotation var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0); // Set the position of the camera on the x-z plane to: // distance meters behind the target transform.position = target.position; transform.position -= currentRotation * Vector3.forward * distance; // Set the height of the camera transform.position = new Vector3(transform.position.x ,currentHeight , transform.position.z); // Always look at the target transform.LookAt(target); } } }

참고로 Main Camera의 세부 세팅을 더해주는 함수를 적용했다. 여기서 Rotation Damping 값이 커지면 카메라 회전 시 딱딱하게 멈추고, 값을 낮추면 회전 정지 시 살짝 미끄러지는 듯한 버퍼를 두어 조금더 동적인 느낌을 주었다. 위 스크립트는 게임 환경에 맞는 정밀한 카메라 세팅이라고 보면 되겠다.

추가적으로 TankMove 스크립트에서

if (pv.IsMine) //로컬이라면 { Camera.main.GetComponent().target = camPivot; rbody.centerOfMass = new Vector3(0.0f, -0.5f, 0.0f); }

함수 호출을 통해 Main camera와 SmoothFollow 스크립트를 가져오게 된다. 그리고 상단에 using UnityStandardAssets.Utility를 추가해줌으로서 SmoothFollow 함수를 사용하기 위한 namespace를 선언해주었다.

3)탱크 궤도 애니메이션

using System.Collections; using System.Collections.Generic; using UnityEngine; public class TankAnim : MonoBehaviour { private float scrollSpeed = 1.0f; private Renderer _renderer; // Start is called before the first frame update void Start() { _renderer = GetComponent(); } // Update is called once per frame void Update() { float offset = Time.time * scrollSpeed * Input.GetAxisRaw(“Vertical”); //기본 텍스처의 Y 오프셋 값 변경 _renderer.material.SetTextureOffset(“_MainTex”, new Vector2(0, offset)); // Diffuse : 물체의 깊이감, 입체감 //노말 텍스터 Y 오프셋 값 변경 _renderer.material.SetTextureOffset(“_BumpMap”, new Vector2(0, offset)); //Normal map: 평명산의 높이갚이 있는 것처럼 // 빛 반사를 바꾸어주는 역할 } }

탱크가 이동할 때 정지해있는 궤도가 이동하여 더욱 실감나게 묘사하기 위해 궤도 회전 애니메이션을 스크립트로 구현했다.

4) 포신 몸통 회전

using System.Collections; using System.Collections.Generic; using UnityEngine; public class TurretCtrl : MonoBehaviour { private Transform tr; private RaycastHit hit; //Ray가 지면에 맞은 위치를 저장할 변수 public float rotSpeed = 5.0f; // Start is called before the first frame update void Start() { tr = GetComponent(); } // Update is called once per frame void Update() { //메인 카메라에서 마우스 커서의 위치로 캐스팅되는 Ray를 생성 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //생선된 Ray를 Scene뷰에 녹색 광선으로 표현 Debug.DrawRay(ray.origin, ray.direction * 100.0f, Color.green); if (Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << 8)) { //Ray에 맞은 위치를 로컬좌표로 변환 Vector3 relative = tr.InverseTransformPoint(hit.point); //역탄젠트 함수인 Atan2로 두 점 간의 각도를 계산 float angle = Mathf.Atan2(relative.x, relative.z) * Mathf.Rad2Deg; //rotSpeed 변수에 지정된 속도로 회전 tr.Rotate(0, angle * Time.deltaTime * rotSpeed, 0); } } } 탱크 이동은 키보드를 입력하고 탱크 포신 방향은 마우스 시점으로 회전할 수 있도록 Turret 메쉬에 적용할 스크립트를 작성했다. RaycastHit을 사용해서 마우스가 위치한 지점으로 포신이 회전하고 클릭 시 포탄이 발사되도록 세팅했다. 여기서 Update() 함수 아래 if 절에서 사용한 "1 << 8" 부분은 Ray를 쏴 맞춘 지점을 설정하는 Layer 값이다. 즉, 포를 쏘면 최소한 땅에 닿아야 하기 때문에 기본 Terrain의 Layer 8의 값을 Terrain으로 생성 및 변경해주면 된다. 5) 포신 높이 이동 using System.Collections; using System.Collections.Generic; using UnityEngine; public class CannonCtrl : MonoBehaviour { private Transform tr; public float rotSpeed = 100.0f; // Start is called before the first frame update void Start() { tr = GetComponent(); } // Update is called once per frame void Update() { float angle = -Input.GetAxis(“Mouse ScrollWheel”) * Time.deltaTime * rotSpeed; tr.Rotate(angle, 0, 0); } }

포신의 높낮이를 조절해 포가 발사되는 각도를 다르게 표현해주었다. 마우스 wheel scroll을 통해 포신을 높이거나 낮추면 되겠다.

6) 포탄 세팅

포신에서 포가 발사될 때 포탄이 날아가는 경로를 시각적으로 보여주기 위해 Trail Renderer을 사용했다. 빈 오브젝트를 생성해 주고 Cannon으로 이름을 변경해주었다.

캡슐 콜라이더를 생성하고 Direction을 Z-Axis로 변경해 눕힌 실린더 형태의 콜라이더로 만들어주었다. 그리고 Rigidbody를 추가해 포탄이 날아가며 중력을 받을 수 있게 설정했다.

Trail Renderer 컴포넌트를 추가해주었다. Trail Renderer는 포탄이 발사되어 날아가는 직/곡선 거리를 시각적으로 보여주는데 뒷 부분이 끌리면서 사라지는 듯한 효과를 준다. 총알/포탄이 발사될 때 자주 사용되는 옵션이다. Width를 0.5로 줄였고, Cast Shadow 0ff / Receive Shadow 체크를 해제하므로서 Rendere 그림자가 겹치지 않도록 세팅했다. 또한 Trail Rederer에 연결된 Train 머터리얼의 Shader는 Mobile/Particles/Additive로 맞춰주었다.

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Cannon : MonoBehaviour { public float speed = 6000.0f; public GameObject expEffect; private CapsuleCollider _collider; private Rigidbody _rigidbody; // Start is called before the first frame update void Start() { _collider = GetComponent(); _rigidbody = GetComponent(); GetComponent().AddForce(transform.forward * speed); StartCoroutine(this.ExplosionCannon(3.0f)); } private void OnTriggerEnter(Collider other) { StartCoroutine(this.ExplosionCannon(0.0f)); } IEnumerator ExplosionCannon(float tm) { yield return new WaitForSeconds(tm); _collider.enabled = false; _rigidbody.isKinematic = true; GameObject obj = (GameObject)Instantiate(expEffect, transform.position, Quaternion.identity); Destroy(obj, 1.0f); Destroy(this.gameObject, 1.0f); } }

포탄이 발사되면 Ray가 도달한 지점 발사 속도, 중력에 영향을 받아 Trail Rederer가 적용되고 Terrain과 맞닥드리는 지점에서 Explosion 이펙트가 발생하도록 하는 스크립트를 연결해주었다.

7)포 발사

포탄이 발사되는 지점을 포신 끝에 위치시켰다. 빈 오브젝트 생성 후 FirePos로 이름을 바꿔준 뒤 적당한 위치로 옮겼다. FirePos는 Cannon에 자식화시켜주었고 스크립트와 연결해주면 된다.

using System.Collections; using System.Collections.Generic; using UnityEngine; public class FireCannon : MonoBehaviour { public GameObject cannon = null; //Cannon 프리팹 public Transform firePos; //Cannon 발사 지점 private AudioClip fireSfx = null; private AudioSource sfx = null; // Start is called before the first frame update void Awake() { cannon = (GameObject)Resources.Load(“Cannon”); fireSfx = Resources.Load(“CannonFire”); sfx = GetComponent(); } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { Fire(); } } void Fire() { sfx.PlayOneShot(fireSfx, 1.0f); Instantiate(cannon, firePos.position, firePos.rotation); } }

플레이 모드에서 마우스 왼쪽을 클릭하면 다음과 같이 발사되며 발사 소리, 폭발 이펙트, 폭발 소리가 함께 나타난다.

8) 멀티 플레이 환경 세팅

using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; using Photon.Realtime; public class PhotonInit : MonoBehaviourPunCallbacks { public string version = “v1.0”; // Start is called before the first frame update void Awake() { PhotonNetwork.ConnectUsingSettings(); } private void OnGUI() { GUILayout.Label(PhotonNetwork.NetworkClientState.ToString()); } public override void OnConnectedToMaster() //포톤 클라우드에 접속이 잘되면 호출되는 콜백함수 { base.OnConnectedToMaster(); Debug.Log(“Entered Lobby”); PhotonNetwork.JoinRandomRoom(); } public override void OnJoinRandomFailed(short returnCode, string message) //방 입장이 실패했을 때 { base.OnJoinRandomFailed(returnCode, message); Debug.Log(“No Room!!”); PhotonNetwork.CreateRoom(“MyRoom”, new RoomOptions { MaxPlayers = 20 }); //방을 만들어줌 (최대 20명) } public override void OnJoinedRoom() { base.OnJoinedRoom(); Debug.Log(“Enter Room”); CreateTank(); } void CreateTank() { float pos = Random.Range(-100.0f, 100.0f); PhotonNetwork.Instantiate(“Tank”, new Vector3(pos, 20.0f, pos), Quaternion.identity, 0); } }

빈 오브젝트 생성, PhotonInit으로 rename 후 해당 스크립트를 연결해 주었다. 그리고 플레이 해보면 본격적으로 실행하기에 앞서 좌측 상단에 Connected To Master, Join Room 등과 같은 접속 메시지가 나타난다. 그리고 최종적으로 Enter room 로그가 나타나면 플레이어 탱크가 생성되고 다중 접속한 다른 유저들과 플레이를 즐길 수 있다. 현재 스크립트 상으로는 MaxPlayer를 20명까지로 설정했지만 필요에 따라 설정을 달리해주면 된다.

반응형

유니티를 이용하여 온라인 게임 만들기 – (1/2)

이번 튜토리얼에서는 유니티 네트워크 기능을 사용하여, 어떻게 다중 플레이어 게임을 구현하는지 알아볼 것이다. 우리는 이전에 온라인 게임을 만들어 본 적은 없지만, 현재 작업중인 LFG: The Fork of Truth 이 어떤 방식으로 구현되어있는지 보여줄 것이다. 이 게임은 4명이 함께 게임을 할 수 있는데, 각 플레이어는 LFG 만화에 등장하는 캐릭터중 하나를 선택해서 플레이 할 수 있다. 적을 무찌르고, 퀘스트를 완료하기 위해서는, 각 플레이어의 능력을 잘 조합해야 한다.

프로젝트를 시작할 때 했던 중요한 결정은, 네트워크를 먼저 구현하고, 다른 나머지를 만드는 것이였다. 새로운 것을 추가할 때 마다, 우리는 네트워크 상태에서도 잘 되는지 테스트 했다. 이러한 방법으로 많은 시간을 아낄 수 있었는데, 왜냐하면 네트워크를 나중에 구현하게 되면, 코드를 많이 수정해야 할 수도 있기 때문이다. 이번 튜토리얼을 따라하기 위해서는, 기본적인 유니티와 C#을 알고 있어야 한다.

우리는 다음과 같은 사항들을 다뤄볼 것이다.

서버 구현 및 존재하는 호스트에 접속하기.

네트워크 상에서, 플레이어와 객체가 생성되는 방법. 상태 동기화와 RPC(Remote Procedure Calls)를 이용한 네트워크 통신. 데이터 패킷간의 값을 보간하고 예측하기.

네트워크는 우리에게 새로운 주제였고, 나는 이 네트워크는 우리에게 새로운 주제였고, 나는 이 튜토리얼 비디오 를 찾았는데, 처음 시작할 때 매우 유용했다. 자바 스크립트로 설명이 되어있지만, 똑같은 내용을 첫 세번째 단락에서 다루고 있다.

서버 만들기

자 시작해보자! 새로운 유니티 프로젝트에서, “NetworkManager”라는 이름으로 C# 스크립트를 생성하자. 이 빈 스크립트를 씬에 있는 카메라 혹은 텅 빈 객체에 붙이자. 이는 서버를 호스팅하고, 존재하는 서버에 접속하는 일을 담당할 것이다.

서버를 만들기 위해서, 우리는 네트워크 상에서 이를 초기화 해야하고, 마스터 서버에 등록해야 한다.

초기화를 하기 위해서는 최대 플레이어 수(우리 같은 경우 4명) 와 포트 넘버(25000)를 요구한다. 서버 등록을 위해서, 게임타입의 이름은 반드시 고유한 이름이여야 하며 그렇지 않으면, 이와 똑같은 이름을 사용하는 다른 프로젝트와 문제를 발생할 것이다. 게임 이름은 어떤 이름도 올 수 있는데, 우리의 경우는 Player의 이름을 사용했다. 밑에 있는 코드를 NetworkManager 스크립트에 추가하자.

1 2 3 4 5 6 7 8 private const string typeName = “UniqueGameName” ; private const string gameName = “RoomName” ; private void StartServer() { Network.InitializeServer(4, 25000, !Network.HavePublicAddress()); MasterServer.RegisterHost(typeName, gameName); }

서버가 성공적으로 초기화되었다면, OnServerInitialized()가 호출 될 것이다. 지금은, 서버가 실제 초기화되었다는 메시지만을 받을 수 있을 것이다.

1 2 3 4 void OnServerInitialized() { Debug.Log( “Server Initializied” ); }

다음으로 해야 할 일은 우리가 원할 때 실제로 서버를 시작할 수 있게 간단한 입력 버튼을 만드는 것이다. 테스트를 하기 위해서 Unity GUI를 사용하여 버튼을 만들 것이다. 우리는 오직, 서버가 시작되지 않았을 경우나, 서버에 접속하지 않았을 때만 보이기를 원한다. 그래서 버튼은 유저가 클라이언트와 서버가 아닌 상태에서만 보일 것이다.

1 2 3 4 5 6 7 8 void OnGUI() { if (!Network.isClient && !Network.isServer) { if (GUI.Button( new Rect(100, 100, 250, 100), “Start Server” )) StartServer(); } }

이제 지금까지 개발했던 것들을 테스트 해 볼 시간이다. 프로젝트를 시작하면, “Start Sever” 버튼을 볼 수 있을 것이다.(1A 그림). 버튼을 누르면, 콘솔창에 서버가 초기화 되었다는 메시지를 볼 수 있을 것이다. 그 후 버튼은 사라진다.(1B 그림)

1A 1B

서버에 접속하기

이제 우리는 서버를 만드는 방법을 알게 되었다. 그러나 아직, 존재하는 서버를 찾거나, 서버에 접속할 수는 없다. 이를 하기 위해서는, HostData의 리스트를 얻기위해 마스터 서버에 요청을 해야 한다. 이 리스트는 서버에 접속하기위한 모든 데이터를 가지고 있다. 한번 Host 리스트를 받으면, 메시지가OnMasterServerEvent()에 의해서 게임에 전달 된다. 이 함수는 많은 이벤트에서 호출되기때문에, 이 메시지가 MasterServerEvent.HostListReceived와 같은지 검사를 해야 한다. 만약 같다면, Host 리스트를 저장할 수 있다.

1 2 3 4 5 6 7 8 9 10 11 12 private HostData[] hostList; private void RefreshHostList() { MasterServer.RequestHostList(typeName); } void OnMasterServerEvent(MasterServerEvent msEvent) { if (msEvent == MasterServerEvent.HostListReceived) hostList = MasterServer.PollHostList(); }

서버에 접속하기 위해서, 호스트 리스트의 한 항목이 필요하다. OnConnectedToServer()은 실제 서버에 접속했을 때 호출된다. 나중에 우리는 이 함수를 확장할 것이다.

1 2 3 4 5 6 7 8 9 private void JoinServer(HostData hostData) { Network.Connect(hostData); } void OnConnectedToServer() { Debug.Log( “Server Joined” ); }

추가적인 버튼을 생성함으로써, 이제 막 만든 함수를 호출할 수 있을 것이다. 이제 시작을 하면 2개의 버튼이 있을 것이다. 하나는 서버를 시작하는 버튼, 그리고 나머지 하나는 Host 리스트를 갱신하는 버튼이다. 새로운 버튼은 모든 서버에 대해 생성된다. 그리고 새로 추가된 버튼을 누르면, 유저는 그와 일치하는 방에 접속할 것이다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void OnGUI() { if (!Network.isClient && !Network.isServer) { if (GUI.Button( new Rect(100, 100, 250, 100), “Start Server” )) StartServer(); if (GUI.Button( new Rect(100, 250, 250, 100), “Refresh Hosts” )) RefreshHostList(); if (hostList != null ) { for ( int i = 0; i < hostList.Length; i++) { if (GUI.Button( new Rect(400, 100 + (110 * i), 300, 100), hostList[i].gameName)) JoinServer(hostList[i]); } } } } 이는 또 다른 테스트를 할 수 있는 좋은 시점이다(2A 그림). 멀티 플레이를 테스트할 때 주의해야할 점은 약간 오래 걸린다는 것이다. 왜냐하면 항상 2개의 게임 인스턴스가 필요하기 때문이다. 2개를 실행시키기 위해서, 새로 빌드를 하라(테스트를 위해 PC로). 그리고 게임을 실행시킨 다음 "Start Server"을 눌러라. 이제 우리는 유니티 편집기에서 새로운 기능을 테스트 할 수 있게 되었다. 리스트를 갱신한 하면, 또 다른 버튼이 나타날 것이다.(2B 그림) 이는 게임 내에서 2개의 인스턴스를 연결시켜 준다.(2C 그림)

키워드에 대한 정보 유니티 멀티

다음은 Bing에서 유니티 멀티 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 기말과제로 멀티 마인크래프트 만들어서 A+ 받기

  • 게임 만들기
  • 마인크래프트
  • 유니티
  • 게임개발
  • unity
  • 네트워크
  • TCP/IP

기말과제로 #멀티 #마인크래프트 #만들어서 #A+ #받기


YouTube에서 유니티 멀티 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 기말과제로 멀티 마인크래프트 만들어서 A+ 받기 | 유니티 멀티, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment