unity使用PhotonEngine实现多人联机游戏开发(二)

2023-10-27

unity使用PhotonEngine实现多人联机游戏开发(二)

上一篇由于Mac没电了,写的有点仓促,可能逻辑不是太好,有些说明有遗漏。先来补充一下:

申请免费光子云的正确步骤应该是先去全球官网注册账号,接着建立photon cloud application,得到一个APP ID,然后拿着这个APP ID去那个中文网页申请,申请的时候还需注意APP ID类型选择 Photon PUN
在这里插入图片描述

OK,现在开始逐一实现上一篇说的目标:

  • unity中搜索Load Balancing Client脚本并打开
    在这里插入图片描述
    找到NameServerHost,原本是http://ns.exitgame.com,改为http://ns.photonengine.cn并保存
    在这里插入图片描述
    然后到
    在这里插入图片描述
    在Fixed Region那里填上cn
  • 初始场景的建设和链接网络脚本的编写:
    建一个button按钮和一个名为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("------离开大厅------");
    }
}

各个回调函数的注释已经写的很详细了,就不再一一介绍了。编写完成后,在button上添加点击后所要触发的方法ClickBtn()
可以开始运行然后点击连接测试一下,下图是我运行测试的结果
在这里插入图片描述

  • 场景跳转后,做个简单的交互(WASD键控制player移动)
    这里虽然简单但是值得注意的是因为我们需要在网络中同步别的玩家,因此我们在做玩家这种预制体的时候需要加两个组件,分别是PhotonViewPhotonTransformView。还有就是需要将预制体放到一个名为Resource的文件夹下,这样引擎才能根据这个目录找到我们的player。
    在这里插入图片描述
    交互的代码我写在了一个空物体上,命名为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;

    }
}
  • 导出保存并运行
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity使用PhotonEngine实现多人联机游戏开发(二) 的相关文章

  • 解决Jenkins报告在浏览器无法显示问题

    在使用jenkins定时启动并收集测试报告的过程中 发现在jenkins上配置的HTML Report打开之后样式不对 页面一片空白 打开开发者模式 发现页面有很多脚本报错 提示有很多资源文件被禁止加载了 百度之后 发现这个是jenkins
  • 【JavaScript】花点时间了解执行上下文

    引言 当我们在浏览器中运行JavaScript代码时 浏览器会先创建一个全局执行上下文 Global Execution Context 然后逐行解析和执行代码 执行上下文是JavaScript中非常重要的概念 它决定了代码的执行顺序和作用

随机推荐

  • Echarts图例legend选中select状态动态更新(踩坑)

    今天计划实现一个小功能 但是却在细节上浪费了大量的时间 特此记录 想要实现的功能是这样的 如下一个ECharts图 后台会一次性接收85条曲线的数据 但在初始化的时候只显示前7条曲线 官方文档 给出了 legend selected 这个属
  • U++ 截屏并拿到所有的截屏资源

    void APluginUseActor spotScreen TArray
  • Qt5下Qxlsx模块安装及使用

    文章目录 1 未安装Qxlsx的程序效果 2 安装Perl 编译Qxlsx源码用 2 1 下载 ActivePerl 5 28 2 2 安装 ActivePerl 5 28 3 下载并编译Qxlsx源码 3 1 下载Qxlsx源码 3 2
  • 树结构(有id和pid字段)数组,生成多层嵌套的json对象

    传入的数组有id和父节点pid字段 通过它们的关联构造成一棵或多棵树结构 param nodes 集合 param treeRootId 根节点的id function createTreeData nodes treeRootId var
  • 【模拟电路】电极驱动H桥

    H桥式驱动电路 是因为它的形状酷似字母H 如图 当Q1和Q4导通时 电机正转 当Q2和Q3导通时 电机反转 任何时候 H桥同一侧的晶体管不能同时导通 否则就会造成电源和地之间短路 电机正转 电机反转 一个双电机驱动电路 H桥 设计思路 使用
  • 深度学习图片数据集分析手段--个人经验小结

    当拿到一批图片数据集的时候 我应该做哪些分析 这里是我自己从业过程中的一些分析手段 从哪里学习的已经不可考 如果有其他的大家觉得有用的分析 可以和我分享一下 避免我自己闭门造车 这里根据已知的信息量分类两种情况 1 只有图片数据 没有标注数
  • Airsim探索01

    Airsim github地址 https github com microsoft AirSim git 官方文档 https microsoft github io AirSim use precompiled
  • linux 中常用的压缩和解压缩命令详解(tar zip)

    文章目录 一 tar命令 1 压缩 2 解压 二 zip命令 1 压缩 2 解压 三 文件加密压缩和密码解压 1 tar命令 1 1 加密压缩 1 2 密码解压 2 zip命令 2 1 加密压缩 2 2 密码解压 在工作中 涉及到文件传输
  • How To get the usbdisk's drive letter properly

    Introduction We know USB disk should be a removable disk just like floppy disk and be used more and more widely now Beca
  • Linux下安装cppunit、gtest单元测试工具

    cppunit下载地址 https www freedesktop org wiki Software cppunit 在linux终端安装 git clone git anongit freedesktop org git libreof
  • UE4引擎插件制作遇到的问题(一)

    大家好 我叫人宅 加载自己做的引擎插件报错 PrimaryGameModuleCouldntBeLoaded The game module 0 could not be loaded There may be an operating s
  • 第二篇web前端面试自我介绍(刚毕业的菜鸟)

    各位面试官 大家好 我叫汤慧来自湖南益阳专业是电子商务web前端方向我今天应聘的职位是web前端开发 在校期间我主修的课程是HTML CSS JavaScript及JQuery 在课余我喜欢通过逛论坛博客github来了解一些前端的前沿的开
  • 为什么要进行单元测试?

    进行单元测试有许多不同的方法 一些主要目的是 验证功能 单元测试确保代码做正确的事情并且不做任何不应该做的事情 大多数错误发生在这里 防止代码回归 当我们发现错误时 添加单元测试来检查场景可以防止代码更改在将来重新引入错误 记录代码 通过正
  • STM32-定时器详解

    前言 定时器作为微控制器不可缺少的外设 在STM32中也是如此 相信不少初学者学到定时器的时候对STM32的学习热情就大打折扣甚至想要放弃了 因为这一部分知识确实比较复杂 但是 如果你在之前对GPIO 串口通信 外部中断的学习中把这些外设掌
  • 数字水印技术

    数字水印技术涉及多个学科知识 其中主要包括图像存储处理原理 密码学 数字图像在计算机里的储存 从结构上讲 分为位图和矢量图 在位图中 图像由许多的屏幕小点组成 这些小点对应显存中的 位 位 决定了像素的图形属性 如像素的颜色 灰度 明暗对比
  • 代码审查和合并请求:团队合作中的关键

    在现代软件开发中 团队合作是不可或缺的一部分 为了确保代码质量 减少错误以及促进知识共享 代码审查和合并请求成为了开发团队中的关键实践 在本文中 我们将深入探讨代码审查和合并请求的重要性 流程以及最佳实践 代码审查的重要性 代码审查是一种通
  • JVM面试题学习笔记1:

    1 谈谈你对JVM的理解 我们写的java文件到通过编译器编译成java字节码文件 class文件 这个过程是java编译过程 而我们的java虚拟机执行的就是字节码文件 即一堆16进制的字节 答 Java虚拟机是一个可以执行Java字节码
  • Vogue 中的 GAN 时尚图像生成分步指南

    介绍 本文将探讨生成对抗网络 GANs 及其在图像生成方面的卓越能力 GANs已经彻底改变了生成建模领域 通过对抗性学习为通过创造性的方法来创建新内容提供了创新性的途径 在本指南中 我们将带你踏上一段迷人的旅程 从 GAN 的基本概念开始
  • STM32+ESP8266 AT测试、透传、DHT11、APP操作以及源代码

    前言 本文主要应用于STM32F103 ESP8266 AT测试 透传 DHT11 APP操作以及源代码链接 1 1简介 ESP8266 是串口型 WIFI 速度比较低 不能用来传输图像或者视频这些大容量的数据 主要应用于数据量传输比较少的
  • unity使用PhotonEngine实现多人联机游戏开发(二)

    unity使用PhotonEngine实现多人联机游戏开发 二 上一篇由于Mac没电了 写的有点仓促 可能逻辑不是太好 有些说明有遗漏 先来补充一下 申请免费光子云的正确步骤应该是先去全球官网注册账号 接着建立photon cloud ap