日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity开发 Photon Pun 多人游戏组件

發布時間:2023/12/18 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity开发 Photon Pun 多人游戏组件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大致原理:每個客戶端把自己的 相關數據(比如位置信息)傳到服務器;再由服務器同步到每一個客戶端里;

組件官方網站: https://www.photonengine.com/zh-CN/Photon

大致步驟

1、在官網創建賬戶;
2、在官網 創建應用: Create new application

選擇類型 photon pun -》 輸入application’s name

創建成功后,可以看到應用的存在,我們要注意 App ID 這串符號,后面要用;

3、【可選項】申請國內的站點服務
因為默認使用的是 國外的服務器,國內訪問可能會慢一點; 所以可以在中國區的官網申請中國光子云;

光子引擎連接: https://vibrantlink.com/

#1 申請光子云

填寫申請信息:注意app id 就是上面提到的id;

然后等郵件吧,工作日才會申請下來,周末可能放假了,我目前還沒有等到,555.。。。;

#2 修改配置
這里將放到 4 - #2里面講解; 因為有光子云 和沒有 光子云有些許區別;

4、創建Unity項目,搭建基本的框架:

#1 導入 photon pun2- 插件;在 assets store里面搜索下載導入;

ps: photon pun2+ 是pro版本,要付費, - 是免費版本;
剛導入可能會有這個窗口,我們跳過,在 #2里進行詳細配置;

#2 修改配置文件: 導入 photon之后,對配置文件進行 些許配置

  • 1、Photon -》 PhotonUnityNetworking -》 Resources: 找到 PhotonServerSettings; 直接搜這個文件也可以;
  • 2、 申請了中國光子云的設置方法:
    • a. 找到腳本 LoadBalancingClient.cs ;
      修改 NameServerHost, 由 ns.exitgames.com 改為 ns.photonengine.cn;
    • b. PhotonServerSettings 的 Fixed Region 設置為 cn;
  • 3、 正常的 設置 PhotonServerSettings文件
    兩處: App id 就是上面反復提到的 id; App Version, 可以隨意設置,比如 1.0;

#3 寫腳本,搭建 框架
小demo:

  • 1、創建 player 的預制體:

    • a. 新建Cube; 添加一個腳本 : PlayerCubeController; 簡單移動邏輯
    using Photon.Pun; using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerController : MonoBehaviour {public float moveSpeed = 2;public float rotateSpeed = 40;private PhotonView pv;// Start is called before the first frame updatevoid Start(){pv = GetComponent<PhotonView>();}// Update is called once per framevoid Update(){if(!pv.IsMine || !PhotonNetwork.IsConnected)return; //讓 玩家控制 自己的角色float hValue = Input.GetAxisRaw("Horizontal");float vValue = Input.GetAxisRaw("Vertical");Vector3 moveValue = new Vector3(hValue*moveSpeed*Time.deltaTime,vValue*moveSpeed*Time.deltaTime,0);this.transform.Translate(moveValue,Space.World);if(Input.GetKey(KeyCode.R)){Vector3 rotateValue = new Vector3(0, rotateSpeed*Time.deltaTime, 0);this.transform.Rotate(rotateValue);}} }
    • b.在 cube上 添加一個 photon view組件; 這個組件是 告訴服務器 我要同步那些信息,下面舉例同步 位置信息 transform;
      兩處修改: 1、 Observerable Serach : 改為Manual; 2、 把Transform組件拖到 Observed Components里面;

      ps: 我們只能同步 指定的組件,如 transform、animator等等,具體可到官網查看;

    • c. 將cube 設為預制體,但是要放到指定文件夾: Photon -> PhotonUnityNetworking -> Resources: 文件夾下面;

  • 2、設置 聯網 信息:

    • a. 創建空物體 PhotonManager, 掛在一個新建腳本 PhotonManager:
    using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; // 引入命名空間 using Photon.Realtime;public class PhotonManager : MonoBehaviourPunCallbacks // 修改繼承對象 {public GameObject playerCube;public Transform posOne;public Transform posTwo;// Start is called before the first frame updatevoid Start(){PhotonNetwork.ConnectUsingSettings(); //通過我們之前配置的文件 連接服務器;Debug.Log("連接上服務器");}//監聽 函數, 連接上服務器 執行public override void OnConnectedToMaster(){base.OnConnectedToMaster();//創建 或者 進入房間RoomOptions roomOptions = new RoomOptions();roomOptions.MaxPlayers = 20;PhotonNetwork.JoinOrCreateRoom("Room0820",roomOptions, TypedLobby.Default);}public override void OnJoinedRoom(){base.OnJoinedRoom();Debug.Log("連接上房間");//創建 玩家:if (playerCube == null || posOne == null || posTwo == null)return;if (PhotonNetwork.LocalPlayer.IsMasterClient){ //本身的玩家 是 主機PhotonNetwork.Instantiate(playerCube.name, posOne.position, playerCube.transform.rotation);// 服務器 幫我們創建玩家; name對應于resources 文件夾下的prefab}else{PhotonNetwork.Instantiate(playerCube.name, posTwo.position, playerCube.transform.rotation);}}}

總結

以上是生活随笔為你收集整理的Unity开发 Photon Pun 多人游戏组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。