国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Unity Photon Fusion 2】多人聯(lián)網(wǎng)插件,共享模式基礎(chǔ)教程

這篇具有很好參考價值的文章主要介紹了【Unity Photon Fusion 2】多人聯(lián)網(wǎng)插件,共享模式基礎(chǔ)教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、插件導(dǎo)入與配置準(zhǔn)備

見主機模式基礎(chǔ)教程

【Unity Photon Fusion 2】多人聯(lián)網(wǎng)插件,主機模式基礎(chǔ)教程-CSDN博客

2、共享模式基礎(chǔ)使用

2.1?場景創(chuàng)建與玩家化身創(chuàng)建

概述
該部分解釋了如何設(shè)置一個簡單的場景以及如何創(chuàng)建一個玩家預(yù)制件。在本節(jié)結(jié)束時,您將擁有一個工作的網(wǎng)絡(luò)場景,為每個連接的客戶端生成一個播放器對象。

2.1.1 設(shè)置場景

從一個空的Unity場景開始。右鍵單擊Unity中的Hierarchy選項卡,選擇Fusion> Scene > Setup Networking in Scene
fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎

?這將在場景中添加一個Prototype Runner物體和一個Prototype Network Start物體。

fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎

  • ?Prototype Runner包含Network Runner,它是運行Fusion模擬的核心組件。Network Events腳本允許您快速將自己的功能鏈接到各種網(wǎng)絡(luò)事件,例如玩家加入或離開會話。
  • Prototype Network Start是一個原型組件,它包含一個用于快速加入Fusion房間的引導(dǎo)GUl。

接下來,在場景中添加一個地板,右鍵單擊Unity中的Hierarchy選項卡,選擇3D?Object> Plane。將GameObject重命名為Floor并將其位置重置為(0, 0, 0)。

fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎

2.1.2 創(chuàng)建玩家預(yù)制件

????????接下來創(chuàng)建播放器對象。右鍵單擊層次結(jié)構(gòu),選擇3d Object > 膠囊。將Gameobject重命名為PlayerCharacter。
????????向其中添加一個Networkobject組件。該組件為對象提供網(wǎng)絡(luò)標(biāo)識,以便所有對等體都可以引用它。
????????添加CharacterController組件。之后移動代碼將使用這一點來移動玩家角色。
????????最后,向其中添加一個NetworkTransform組件。NetworkTransform自動將對象的位置同步到其他客戶端。
????????將PlayerCharacter拖拽到Project窗口中創(chuàng)建預(yù)制件并將其從場景中刪除。這樣玩家角色就可以被生成了。

?fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎

2.1.3 生成玩家?

與單人游戲不同的是,場景中只有一個玩家對象是不夠的。對于多人游戲,需要為每個加入會話的玩家生成一個玩家對象。為此,需要一個自定義腳本。創(chuàng)建一個PlayerSpawner腳本并打開它。將以下代碼添加到其中:
?

using Fusion;
using UnityEngine;

public class PlayerSpawner : SimulationBehaviour, IPlayerJoined
{
    public GameObject PlayerPrefab;

    public void PlayerJoined(PlayerRef player)
    {
        if (player == Runner.LocalPlayer)
        {
            Runner.Spawn(PlayerPrefab, new Vector3(0, 1, 0), Quaternion.identity);
        }
    }
}

代碼非常簡單。IPlayerJoined接口有一個PlayerJoined函數(shù),每當(dāng)玩家加入會話時,如果行為與runner在相同的GameObject上,該函數(shù)就會被調(diào)用。這不僅適用于我們自己的玩家,也適用于從不同設(shè)備加入的其他玩家。它只需要為我們自己的播放器生成一個播放器對象。當(dāng)一個對象用Runner.Spawn()時。它會自動復(fù)制到所有其他客戶端。

SimulationBehaviour用于訪問NetworkRunner,其中包含有關(guān)當(dāng)前會話的所有信息,包括本地玩家的玩家ID。

將PlayerSpawner組件添加到Prototype Runner?對象中,并將PlayerCharacter預(yù)制件分配給它。
這樣,玩家生成就完全設(shè)置好了。進入播放模式,按“Start Shared Client”啟動共享模式的Fusion。

fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎
?玩家膠囊將出現(xiàn)在場景中。玩家還不能移動或與任何東西互動。在下一章中,我們將通過執(zhí)行玩家移動來賦予玩家生命。

fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎

2.2 移動控制與相機控制

概述
在第該部分中,通過添加基于玩家輸入和第一人稱的玩家移動來擴展現(xiàn)有場景相機跟隨正確的玩家對象。

2.2.1 玩家移動控制

在Fusion中,更新每一次tick(如移動)的游戲玩法代碼不應(yīng)該在Update / FixedUpdate中運行,而應(yīng)該使用FixedUpdateNetwork。這確保了運動是平滑的,并在所有客戶端上正確地插入。
創(chuàng)建一個新腳本,命名為PlayerMovement,并將以下代碼添加到腳本中:

using Fusion;
using UnityEngine;

public class PlayerMovement : NetworkBehaviour
{
    private CharacterController _controller;

    public float PlayerSpeed = 2f;

    private void Awake()
    {
        _controller = GetComponent<CharacterController>();
    }

    public override void FixedUpdateNetwork()
    {
        // Only move own player and not every other player. Each player controls its own player object.
        if (HasStateAuthority == false)
        {
            return;
        }

        Vector3 move = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * Runner.DeltaTime * PlayerSpeed;

        _controller.Move(move);

        if (move != Vector3.zero)
        {
            gameObject.transform.forward = move;
        }
    }
}

?請注意,它繼承自NetworkBehaviour而不是MonoBehaviour,后者提供FixedUpdateNetwork,并允許稍后使用Networked Properties。
HasStateAuthority可以用來檢查客戶端是否控制一個對象。NetworkTransform只將來自StateAuthority的更改同步到其他所有人。如果另一個客戶端更改了對象的位置,則該更改將僅是局部更改,并且將來會被來自網(wǎng)絡(luò)的數(shù)據(jù)覆蓋。

總是使用Runner。在FixedUpdateNetwork中運行的代碼的DeltaTime !

處理按鈕按下
像GetButtonDown和Up這樣的一次性輸入會在Unity的Update中被觸發(fā)。在Fusion中,移動等玩法代碼應(yīng)該在FixedUpdateNetwork中執(zhí)行。這意味著需要特殊的處理來準(zhǔn)確地跟蹤按鈕狀態(tài)。

請注意,在FixedUpdateNetwork中檢查按鈕按下時也會出現(xiàn)相同的問題。

有多種方法可以捕獲像FixedUpdateNetwork這樣的輸入:
1)、查詢更新中的按鈕按鈕。將結(jié)果存儲在bool中,并將其用于游戲邏輯。最后把它清理干凈
固定更新網(wǎng)絡(luò)
2)、使用Fusion的Networklnput和NetworkButtons。
3)、使用新的Unity輸入系統(tǒng),將Update Mode設(shè)置為Manual Update并在FixedUpdateNetwork調(diào)用IInputSystem.Update

以上選項僅適用于共享模式。在服務(wù)器/主機模式下運行Fusion時,總是使用Networklnput。?

2.2.2 玩家跳躍控制

讓我們實現(xiàn)一個通過為玩家執(zhí)行跳躍動作來處理按鈕按壓的例子。在本例中,使用上一節(jié)列出的選項中的選項1。
將PlayerMovement腳本中的代碼替換為以下代碼:
?

using Fusion;
using UnityEngine;

public class PlayerMovement : NetworkBehaviour
{
    private Vector3 _velocity;
    private bool _jumpPressed;

    private CharacterController _controller;

    public float PlayerSpeed = 2f;

    public float JumpForce = 5f;
    public float GravityValue = -9.81f;

    private void Awake()
    {
        _controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (Input.GetButtonDown("Jump"))
        {
            _jumpPressed = true;
        }
    }

    public override void FixedUpdateNetwork()
    {
        // Only move own player and not every other player. Each player controls its own player object.
        if (HasStateAuthority == false)
        {
            return;
        }

        if (_controller.isGrounded)
        {
            _velocity = new Vector3(0, -1, 0);
        }

        Vector3 move = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * Runner.DeltaTime * PlayerSpeed;

        _velocity.y += GravityValue * Runner.DeltaTime;
        if (_jumpPressed && _controller.isGrounded)
        {
            _velocity.y += JumpForce;
        }
        _controller.Move(move + _velocity * Runner.DeltaTime);

        if (move != Vector3.zero)
        {
            gameObject.transform.forward = move;
        }

        _jumpPressed = false;
    }
}

這段代碼向KCC添加了跳躍函數(shù)和速度/重力處理。
_jumpPressed用于跟蹤按鈕狀態(tài)。該按鈕在每次更新時進行輪詢,以確保沒有漏按,并在FixedUpdateNetwork結(jié)束時重置。

if (_controller.isGrounded)
{
    _velocity = new Vector3(0, -1, 0);
}

?是用來確保KCC保持固定在地面上,即使走在小斜坡上,只有跳躍允許玩家離開地面。

2.2.3 游戲測試

準(zhǔn)備好PlayerMovement腳本后,返回Unity并將PlayerMovement組件添加到PlayerCharacter預(yù)制中。
現(xiàn)在是測試玩家移動的時候了。要有兩個客戶端可用,首先創(chuàng)建一個Unity構(gòu)建。
進入File> Build Settings,將當(dāng)前場景添加到列表中。然后按下窗口左下方的播放器設(shè)置按鈕。
在播放器設(shè)置中的分辨率和呈現(xiàn)設(shè)置全屏模式為窗口,并確保在后臺運行被選中。

fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎

返回到 Build Settings 窗口并選擇 Build and Run 以創(chuàng)建生成。一旦構(gòu)建完成,在Unity中進入播放模式,以便兩個客戶端可用。
在兩個客戶端上按 Start Shared Client 按鈕。出現(xiàn)兩個玩家,每個玩家由一個客戶控制。測試走動和跳躍是否有效。

fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎
?

2.2.4?相機控制

為了完成播放器設(shè)置,讓我們添加一個攝像機。
設(shè)置攝像頭的方法有很多種(第三人稱、第一人稱等),執(zhí)行方法也各不相同。在多人游戲中,通常需要單個攝像機跟隨本地玩家對象。有兩種常見的方法可以做到這一點。
1)、當(dāng)本地播放器對象被生成時,讓它實例化一個攝像機。
2)、讓攝像機成為場景的一部分。當(dāng)本地播放器對象生成時,讓它將相機附加到自身上。
在本教程中使用第二種方法。
創(chuàng)建一個新腳本并命名為FirstPersonCamera。在其中添加以下代碼
?

using UnityEngine;

public class FirstPersonCamera : MonoBehaviour
{
    public Transform Target;
    public float MouseSensitivity = 10f;

    private float verticalRotation;
    private float horizontalRotation;

    void LateUpdate()
    {
        if (Target == null)
        {
            return;
        }

        transform.position = Target.position;

        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        verticalRotation -= mouseY * MouseSensitivity;
        verticalRotation = Mathf.Clamp(verticalRotation, -70f, 70f);

        horizontalRotation += mouseX * MouseSensitivity;

        transform.rotation = Quaternion.Euler(verticalRotation, horizontalRotation, 0);
    }
}

這是一個非常簡單的第一人稱攝像機實現(xiàn)。注意,代碼不包含任何多人游戲元素。您可以將此相機替換為與目標(biāo)對象(包括Cinemachine)一起工作的任何其他相機設(shè)置。
將FirstPersonCamera行為放在場景中的MainCamera GameObject上。沒有必要拖拽一個目標(biāo)。目標(biāo)將在運行時由代碼設(shè)置。
fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎

要分配目標(biāo),打開PlayerMovement腳本。添加一個變量來存儲攝像機:

public Camera Camera;

?然后,當(dāng)玩家對象生成時,如果它是本地玩家,則查找并設(shè)置相機。

public override void Spawned()
{
    if (HasStateAuthority)
    {
        Camera = Camera.main;
        Camera.GetComponent<FirstPersonCamera>().Target = transform;
    }
}

?在初始化Networkobjects時,請確保始終使用spawn而不是Awake/Start。在Awake/Start中,NetworkObject可能還沒有準(zhǔn)備好使用。

HasStateAuthority只對播放器控制的對象為真,所以只對本地播放器對象有效,對其他播放器對象無效。?

最后,因為在第一人稱游戲中,玩家角色會朝著視覺方向移動,所以需要調(diào)整一下移動方向。將計算Vector3移動的行替換為:

Quaternion cameraRotationY = Quaternion.Euler(0, Camera.transform.rotation.eulerAngles.y, 0);
Vector3 move = cameraRotationY * new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * Runner.DeltaTime * PlayerSpeed;

2.3?Network Properties 網(wǎng)絡(luò)屬性?

?概述
本節(jié)展示了如何通過網(wǎng)絡(luò)同步其他數(shù)據(jù),除了玩家的位置使用網(wǎng)絡(luò)屬性

2.3.1 網(wǎng)絡(luò)屬性

????????當(dāng)您向networkobject添加NetworkTransform組件時,F(xiàn)usion會同步它們的轉(zhuǎn)換。其他狀態(tài),如腳本中的變量,不通過網(wǎng)絡(luò)同步。要使?fàn)顟B(tài)在網(wǎng)絡(luò)上同步,需要一個[Networked]屬性。網(wǎng)絡(luò)屬性將其狀態(tài)從StateAuthority同步到所有其他客戶端。

????????如果客戶端在一個對象上更改了一個它沒有StateAuthority的Networked Property,那么這個更改不會在網(wǎng)絡(luò)上同步,而是作為一個本地預(yù)測應(yīng)用,并且可以在將來被StateAuthority的更改覆蓋。如果您希望在每個客戶機上更新StateAuthority上的Networked Properties,請注意只更新它。

????????網(wǎng)絡(luò)屬性的一個簡單例子就是玩家的顏色。首先創(chuàng)建一個新腳本并命名為PlayerColor。添加一個Networked屬性和一個公共字段來引用對象的MeshRender

using Fusion;
using UnityEngine;

public class PlayerColor : NetworkBehaviour
{
    public MeshRenderer MeshRenderer;

    [Networked]
    public Color NetworkedColor { get; set; }
}

注意,網(wǎng)絡(luò)屬性必須是屬性({ get;set; }),不支持常規(guī)字段。
接下來在更新中添加代碼,允許StateAuthority改變顏色:

void Update()
{
    if (HasStateAuthority && Input.GetKeyDown(KeyCode.E))
    {
        // Changing the material color here directly does not work since this code is only executed on the client pressing the button and not on every client.
        NetworkedColor = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f);
    }
}

當(dāng)按鈕被按下時,網(wǎng)格渲染的顏色不會立即改變。相反,網(wǎng)絡(luò)屬性被更新。這樣,顏色的變化將被復(fù)制到所有客戶端。剩下的是每個客戶端檢查網(wǎng)絡(luò)屬性的變化,并相應(yīng)地調(diào)整網(wǎng)格顏色。
在Fusion中,這是通過ChangeDetection完成的。在共享模式下做到這一點的最簡單方法是使用OnChangedRender屬性。首先添加一個函數(shù),當(dāng)NetworkedColor改變時執(zhí)行。

void OnColorChanged()
{
    MeshRenderer.material.color = NetworkedColor;
}

然后用OnChangedRender屬性調(diào)整Networked屬性:

[Networked, OnChangedRender(nameof(OnColorChanged))]
public Color NetworkedColor { get; set; }

這個屬性在每次渲染幀(Unity Update)中檢測到屬性變化時調(diào)用OnColorChanged函數(shù)。
將PlayerColor組件添加到PlayerCharacter預(yù)制件中,并在播放器上鏈接MeshRender。進入播放模式并按 E 鍵,你可以在編輯視圖中檢查玩家正在改變顏色。此時,您還可以創(chuàng)建一個構(gòu)建來驗證顏色是否通過網(wǎng)絡(luò)正確同步。
fusion聯(lián)網(wǎng)network transform,unity知識學(xué)習(xí)分享,unity,游戲引擎
?

2.4?RPCs?

概述
在最后一個部分,一個網(wǎng)絡(luò)屬性被添加到同步玩家的顏色到所有其他玩家。由于玩家對自己的網(wǎng)絡(luò)屬性擁有StateAuthority,他們可以直接更新自己的顏色值。
然而,這并不適用于網(wǎng)絡(luò)對象的網(wǎng)絡(luò)屬性,其中StateAuthority是另一個客戶端。
這部分包含了一個攻擊玩家并在需要修改另一個玩家的網(wǎng)絡(luò)屬性時減少其生命值的例子。
?

2.4.1?修改其他玩家的網(wǎng)絡(luò)屬性

更改另一個客戶端擁有狀態(tài)權(quán)限的網(wǎng)絡(luò)屬性的方法是向?qū)ο蟮臓顟B(tài)權(quán)限發(fā)送RPC(遠(yuǎn)程過程調(diào)用),并讓它們更改網(wǎng)絡(luò)屬性
雖然可以通過代碼更改網(wǎng)絡(luò)財產(chǎn)的值。更改將僅在本地應(yīng)用,而不會在網(wǎng)絡(luò)上復(fù)制。
這方面的一個例子便是使用光線投射武器射擊玩家。對于Fusion共享模式,一個簡單的實現(xiàn)是讓玩家在本地執(zhí)行光線投射,如果它擊中目標(biāo),則對目標(biāo)施加傷害。注意,在服務(wù)器/主機模式下光線投射武器的方法是不同的。查看
Fusion Projectiles樣本中的服務(wù)器/主機模式示例。
創(chuàng)建一個新腳本,并將其命名為Health。添加網(wǎng)絡(luò)屬性和更改檢測功能,以記錄運行狀況值的更改:

using Fusion;
using UnityEngine;

public class Health : NetworkBehaviour
{
    [Networked, OnChangedRender(nameof(HealthChanged))]
    public float NetworkedHealth { get; set; } = 100;

    void HealthChanged()
    {
        Debug.Log($"Health changed to: {NetworkedHealth}");
    }
}

接下來添加一個RPC,射擊者可以調(diào)用它對敵方玩家造成傷害:

[Rpc(RpcSources.All, RpcTargets.StateAuthority)]
public void DealDamageRpc(float damage)
{
    // The code inside here will run on the client which owns this object (has state and input authority).
    Debug.Log("Received DealDamageRpc on StateAuthority, modifying Networked variable");
    NetworkedHealth -= damage;
}

RpcSources.All 這些都允許任何人調(diào)用RPC。默認(rèn)情況下,只有InputAuthority(與共享模式下的StateAuthority相同)可以調(diào)用RPC。
RpcTargets.StateAuthority設(shè)置只有StateAuthority接收RPC。這樣做是因為州政府會更新健康網(wǎng)絡(luò)財產(chǎn)。RPC函數(shù)內(nèi)部的代碼運行在RpcTarget客戶端上,因此在本例中運行在可以更改其自己的Networked Properties的StateAuthority上。

接下來創(chuàng)建一個新腳本并命名為itRaycastAttack。將以下代碼添加到其中

using Fusion;
using UnityEngine;

public class RaycastAttack : NetworkBehaviour
{
    public float Damage = 10;

    public PlayerMovement PlayerMovement;

    void Update()
    {
        if (HasStateAuthority == false)
        {
            return;
        }

        Ray ray = PlayerMovement.Camera.ScreenPointToRay(Input.mousePosition);
        ray.origin += PlayerMovement.Camera.transform.forward;

        if (Input.GetKeyDown(KeyCode.Mouse1))
        {
            Debug.DrawRay(ray.origin, ray.direction, Color.red, 1f);
        }
    }
}

這段代碼是一個簡單的單人游戲光線投射實現(xiàn)。HasStateAuthority檢查只用于在StateAuthority上執(zhí)行這段代碼,這樣當(dāng)玩家按下fire按鈕時,只有他們自己的玩家角色觸發(fā)光線投射。
現(xiàn)在要對目標(biāo)施加傷害,剩下的就是對其調(diào)用RPC函數(shù)。在調(diào)試之后。繪制線添加以下內(nèi)容:

if (Runner.GetPhysicsScene().Raycast(ray.origin,ray.direction, out var hit))
{
    if (hit.transform.TryGetComponent<Health>(out var health))
    {
        health.DealDamageRpc(Damage);
    }
}

?完成后,將Health和RaycastAttack組件添加到玩家預(yù)制件中并創(chuàng)建一個構(gòu)建。

2.4.2 其他RPC用例

請求State Authority修改網(wǎng)絡(luò)屬性是RPC最常見的用例。
RPC的其他有效用例包括:
1.在玩家之間發(fā)送嘲諷信息、表情或其他不穩(wěn)定的非游戲互動。
⒉啟動游戲(對游戲模式、地圖進行投票,或者只是向主持人表明玩家已經(jīng)準(zhǔn)備好了)。
在大多數(shù)情況下,狀態(tài)同步本身足以讓玩家保持一致,向網(wǎng)絡(luò)屬性添加變化檢測器可以處理大多數(shù)過渡情況,其中應(yīng)用程序關(guān)心狀態(tài)的變化,而不僅僅是實際狀態(tài)本身。

2.4.3 游戲測試

恭喜你!你已經(jīng)成功完成了Fusion共享模式基礎(chǔ)教程。為了確保一切正常運行,現(xiàn)在是時候玩和測試游戲了。
在Unity中啟動構(gòu)建并進入播放模式,然后按Start Shared Client。右鍵點擊其他玩家將在控制臺上顯示其生命值減少的信息。
您還可以在Unity的層次檢查器中檢查網(wǎng)絡(luò)屬性的健康值。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-859586.html

到了這里,關(guān)于【Unity Photon Fusion 2】多人聯(lián)網(wǎng)插件,共享模式基礎(chǔ)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Unity之Photon PUN2開發(fā)多人游戲如何實現(xiàn)組隊功能

    Photon Unity Networking 2 (PUN2) 是一款基于Photon Cloud的Unity多人游戲開發(fā)框架。它提供了一系列易于使用的API和工具,使開發(fā)者可以快速構(gòu)建多人戲,并輕松處理多人游戲中的網(wǎng)絡(luò)同步、房間管理、玩家匹配等問題。 我們在查看Pun2的Demo時,會發(fā)現(xiàn)Demo中自帶了一個簡易的PhotonTeam和

    2024年02月11日
    瀏覽(64)
  • 【Unity工具,簡單應(yīng)用】Photon + PUN 2,做一個簡單多人在線聊天室

    【Unity工具,簡單應(yīng)用】Photon + PUN 2,做一個簡單多人在線聊天室

    【Unity工具,簡單學(xué)習(xí)】PUN 2,多人在線游戲開發(fā),初步使用 需要有一定 UNITY 使用經(jīng)驗的開發(fā)者可以順利閱讀。 簡單搭建一下大廳UI。 給 Laucher 節(jié)點一個 Launcher 腳本 Launcher 腳本如下,具體功能看注釋 需要注意的是 PhotonNetwork.JoinOrCreateRoom(RoomName, new RoomOptions() { MaxPlayers = ma

    2024年02月08日
    瀏覽(73)
  • Unity之使用Photon Server + PUN2 開發(fā)局域網(wǎng)多人游戲

    Unity之使用Photon Server + PUN2 開發(fā)局域網(wǎng)多人游戲

    Photon Engine是一款跨平臺的實時多人游戲引擎,它提供了可靠的基礎(chǔ)設(shè)施和工具,使開發(fā)者能夠輕松地構(gòu)建和部署多人游戲。Photon Engine支持多種平臺,包括PC、移動設(shè)備和Web,同時還提供了多種語言的SDK,如C++、C#、Java、JavaScript等,使得開發(fā)者可以使用自己熟悉的編程語言進

    2024年02月13日
    瀏覽(27)
  • unity多人聯(lián)機(Mirror插件)有史以來最全的基礎(chǔ)教程(附加報錯提示和官方手冊修改)

    unity多人聯(lián)機(Mirror插件)有史以來最全的基礎(chǔ)教程(附加報錯提示和官方手冊修改)

    目錄 START?? (??ヮ?)?Mirror簡介?(?ヮ??) 組件介紹: 組件1:NetworkManager 組件2:NetworkManagerHUD(需要配合Network Manager組件) 組件3:NetworkIdentity 組件4:network discoverynetwork discoveryHUD 錯誤注意: 最后,對手冊內(nèi)容的一點修改: 今天我們只講代碼和組件,大家拿小本本記好了,字

    2024年02月02日
    瀏覽(28)
  • Unity聯(lián)網(wǎng)多人游戲技術(shù)方案調(diào)研

    Unity聯(lián)網(wǎng)多人游戲技術(shù)方案調(diào)研

    Listen Server (Host) 和 Relay轉(zhuǎn)發(fā)服務(wù)器游戲包同時包含客戶端和服務(wù)端邏輯,聯(lián)網(wǎng)時一個客戶端開主,稱為Host,其他客戶端連入。局域網(wǎng)和互聯(lián)網(wǎng)都支持?;ヂ?lián)網(wǎng)需要有一個匹配服務(wù)器幫助找到不同人建立的主機。如果不使用Relay服務(wù)器,那對于互聯(lián)網(wǎng)連接就要使用NAT穿透下的

    2023年04月09日
    瀏覽(41)
  • VR多人協(xié)同(Photon Server & Pun2 & VRIF)

    VR多人協(xié)同(Photon Server & Pun2 & VRIF)

    內(nèi)容介紹: 采用Photon Server作為本地服務(wù)器,然后使用Pun2連接本地服務(wù)進行VR多人交互 Photon Server部署 1、下載并解壓: photon-server-sdk_v5-0-12-24499-rc1.zip 2、授權(quán)(因官方授權(quán)問題可以轉(zhuǎn)用V4.0Server:VR多人協(xié)同(多人游戲本地服務(wù)器)(Photon Server V4.0)) 獲取地址: 點擊領(lǐng)取你的

    2024年02月16日
    瀏覽(56)
  • IT互聯(lián)網(wǎng)行業(yè)資源共享云計算模式及創(chuàng)新技術(shù)

    作者:禪與計算機程序設(shè)計藝術(shù) 在IT行業(yè)中,作為基礎(chǔ)設(shè)施提供者的公司往往需要承擔(dān)高昂的運營成本、大量的維護工作、復(fù)雜的管理系統(tǒng)等等。相對于傳統(tǒng)的自建機房,公有云服務(wù)或托管服務(wù)等更加經(jīng)濟和便捷。利用云端資源可以節(jié)省企業(yè)內(nèi)部服務(wù)器資源投入,提升業(yè)務(wù)運

    2024年02月08日
    瀏覽(27)
  • Unity_Photon

    (2條消息) 【Unity3D】Photon環(huán)境搭建_photon框架_little_fat_sheep的博客-CSDN博客 主要代碼 : PhotonNetwork.ConnectUsingSettings(); 鏈接成功。 狀態(tài):ClientState.ConnectedToMasterServer 創(chuàng)建房間 : PhotonNetwork.CreateRoom(roomName); 連接成功后。 創(chuàng)建成功后。 回調(diào)用于檢測前序操作是否成功。 PhotonCallBa

    2024年02月08日
    瀏覽(23)
  • Unity原生語音識別/無插件/可離線/不需要聯(lián)網(wǎng) 語音識別

    直接上代碼,保證自己的設(shè)備連接了麥克風(fēng),之后把下面代碼直接掛在場景的空物體上,運行即可

    2024年02月03日
    瀏覽(20)
  • Microsoft.OneNote多人共享:詳細(xì)步驟,存在的問題與解決方式

    Microsoft.OneNote多人共享:詳細(xì)步驟,存在的問題與解決方式

    OneNote是微軟出品的筆記本軟件,可以跨平臺使用并支持多人協(xié)作,對于需要長久合作的小規(guī)模隊伍來說,是一款很好的協(xié)同工作軟件。由于在國內(nèi),OneNote內(nèi)的協(xié)作設(shè)置很可能存在問題,這里提供一種解決方法。 1. 傳統(tǒng)OneNote共享方式: 1) “成員A(共享發(fā)起者)”在筆記本

    2024年02月04日
    瀏覽(177)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包