Unity는 PhotonEngine을 사용하여 멀티플레이어 온라인 게임 개발을 실현합니다(2)

Unity는 PhotonEngine을 사용하여 멀티플레이어 온라인 게임 개발을 실현합니다(2)

이전 글은 맥의 전원이 나가서 급하게 쓴 글이라 로직이 별로 좋지 않을 수도 있고, 몇몇 지침이 누락되어 있을 수도 있습니다. 먼저 뭔가를 추가하겠습니다.

무료 Photon Cloud를 신청하는 올바른 단계는 먼저 글로벌 공식 웹사이트에 계정을 등록한 다음 Photon Cloud 애플리케이션을 만들고 APP ID를 얻은 다음 이 APP ID를 사용하여 중국 웹사이트로 이동하여 신청하는 것입니다. 적용 시, APP ID 유형으로 Photon을 선택하는 것도 주의가 필요합니다.
여기에 이미지 설명을 삽입하세요.

자, 이제 이전 기사에서 언급한 목표를 하나씩 달성해 보세요.

  • Unity에서 Load Balancing Client 스크립트를 검색하여 엽니다.
    여기에 이미지 설명을 삽입하세요.
    NameServerHost를 찾습니다. 원래는 http://ns.exitgame.com이었습니다. http://ns.photonengine.cn으로 변경하고 저장한
    여기에 이미지 설명을 삽입하세요.
    다음
    여기에 이미지 설명을 삽입하세요.
    고정으로 이동합니다. 지역을 선택하고 cn을 입력합니다.
  • 초기 장면 구성 및 링크 네트워크 스크립트 작성:
    버튼 버튼과 NetworkingManager라는 스크립트를 만든 다음 NetworkingManager라는 스크립트를 탑재할 빈 개체를 만듭니다.
    여기에 이미지 설명을 삽입하세요.
    여기에 이미지 설명을 삽입하세요.
  • 스크립팅
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//引入命名空间
using Photon.Pun;
using Photon.Realtime;

//让脚本继承MonoBehaviourPunCallbacks类,这个类是关于回调函数的
public class NetworkingManager : MonoBehaviourPunCallbacks
{
    
    
    [SerializeField]
    private int sceneIndex;
    //当按钮被点击的时候判断一下是否与服务器链接,如果链接成功就加入房间,否则开始链接。
    public void ClickBtn()
    {
    
    
        if (PhotonNetwork.IsConnected)
        {
    
    
            PhotonNetwork.JoinRandomRoom();
        }
        else
        {
    
    
            PhotonNetwork.ConnectUsingSettings();
        }
    }
    //尝试与主服务器进行链接时调用
    public override void OnConnectedToMaster()
    {
    
    
        PhotonNetwork.JoinRandomRoom();
    }
    //当链接成功时调用
    public override void OnConnected()
    {
    
    
        Debug.Log("------链接成功------");
    }
    //当链接失败的时候
    public override void OnDisconnected(DisconnectCause cause)
    {
    
    
        Debug.Log("------链接失败------");
    }
    //当加入大厅成功的时候
    public override void OnJoinedLobby()
    {
    
    
        Debug.Log("------加入大厅成功------");
    }
    //加入房间失败的时候调用,加入房间失败,并创建房间,可容纳最大人数为5人
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
    
    
        Debug.Log("------加入房间失败------");
        Debug.Log("------建立新房间,最大可容纳5人------");
        PhotonNetwork.CreateRoom("RoomName",new RoomOptions {
    
     MaxPlayers = 5 });
    }
    //创建房间成功
    public override void OnCreatedRoom()
    {
    
    
        Debug.Log("------创建房间成功------");
    }
    //创建房间失败
    public override void OnCreateRoomFailed(short returnCode, string message)
    {
    
    
        Debug.Log("------创建房间失败------");
    }
    //加入房间成功,并跳转场景至游戏界面
    public override void OnJoinedRoom()
    {
    
    
        Debug.Log("------加入房间成功------");
        PhotonNetwork.LoadLevel(sceneIndex);
    }
    //离开房间时调用
    public override void OnLeftRoom()
    {
    
    
        Debug.Log("------离开房间------");
    }
    //离开大厅时调用
    public override void OnLeftLobby()
    {
    
    
        Debug.Log("------离开大厅------");
    }
}

각 콜백 함수에 대한 코멘트는 자세하게 작성되어 있어서 하나씩 소개하지는 않겠습니다. 작성이 완료되면 버튼 클릭 시 실행될 ClickBtn() 메소드를 추가하고
실행을 시작한 후 연결을 클릭하여 테스트해 보면 다음 그림과 같습니다.
여기에 이미지 설명을 삽입하세요.

  • 장면 점프 후 간단한 상호작용을 만듭니다.(WASD 키는 플레이어의 움직임을 제어합니다.)
    여기서는 간단하지만 네트워크의 다른 플레이어를 동기화해야 하기 때문에 플레이어와 같은 프리팹을 만들 때 두 개를 추가해야 한다는 점에 유의할 가치가 있습니다. 두 가지 구성요소, 즉 PhotonViewPhotonTransformView 입니다 . 또한 엔진이 이 디렉토리를 기반으로 플레이어를 찾을 수 있도록 Resource라는 폴더에 프리팹을 넣어야 합니다 .
    여기에 이미지 설명을 삽입하세요.
    GameManager라는 빈 개체에 대화형 코드를 작성했는데
    여기에 이미지 설명을 삽입하세요.
    여기에 이미지 설명을 삽입하세요.
    코드는 다음과 같습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//引入命名空间
using Photon.Pun;

public class GameManager : MonoBehaviourPun  //继承MonoBehaviourPun类
{
    
    
    [SerializeField]
    private GameObject Player;
    private GameObject go = null;

    //游戏一开始就把玩家实例话出来
    private void Awake()
    {
    
    
        go = PhotonNetwork.Instantiate(Player.name, Vector3.zero, Quaternion.identity);   
    }
    /// <summary>
    /// WASD键跟新player的位置信息
    /// </summary>
    private void Update()
    {
    
    
        go.transform.position += Input.GetAxis("Horizontal") * Vector3.right * 0.4f;
        go.transform.position += Input.GetAxis("Vertical") * Vector3.forward * 0.4f;

    }
}
  • 내보내기 저장 및 실행
    여기에 이미지 설명을 삽입하세요.

Supongo que te gusta

Origin blog.csdn.net/qq_41294510/article/details/131511470
Recomendado
Clasificación