代码之家  ›  专栏  ›  技术社区  ›  Rumata

如何使用光子在多人游戏中共享材质变化?

  •  1
  • Rumata  · 技术社区  · 6 年前

    我正在使用本教程开发一个简单的AR多人游戏应用程序。
    https://www.youtube.com/watch?v=n3a-aaSYR8s
    SourceCode

    一个用户把一个简单的三维立方体放在房间的某个地方,然后他和其他将加入游戏的玩家可以通过点击一个按钮来改变它的材质,这个按钮执行一个简单的代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ChangeMaterial : MonoBehaviour {
    
    
        public Material material_1;
        public Material material_2;
        public GameObject MainObject;
    
    
        void Update(){
            MainObject = GameObject.FindWithTag("Player");
        }
    
    
    
        public void assignMaterialOne(){
                MainObject.GetComponent<Renderer> ().material = material_1;
            }
    
        public void assignMaterialTwo(){
            MainObject.GetComponent<Renderer> ().material = material_2;
        }
    
    
    
    }
    

    它适用于放置立方体的一个玩家,但是当其他玩家加入游戏时,他们看到的是带有默认材质的立方体。他们可以改变它的材质,但只有在他们的设备上才能看到。

    如何为所有用户同步和显示材质或立方体动画的更改?既然本教程使用光子,有没有办法用光子来实现它?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Martijn Pieters    4 年前

    要做到这一点,您需要通过网络发送数据,在您的情况下是对材料的引用(您可以使用材料名称,但使用简单的查找表的整数或字节将更有效地节省带宽)

    所以在你的玩家拥有和控制的实例上,你在改变它的时候设置了这个材质引用,所有其他的从属实例都会检查这个变化,并相应地调整它们自己的实例。

    因此,我认为在您的情况下,您可以使用RPC:

    https://doc.photonengine.com/en-us/pun/current/gameplay/rpcsandraiseevent