Unity 3D Photon 简单应用
PhotonVoice
如何开启声音的通讯
-
导入photonVoice的包到unity项目中,并且填入再photon所申请的network id 和 voice id
-
在场景中添加一个object用于调用脚本
添加4个脚本
a. 在【push to talk script】脚本中添加两个组件:[push to talk button]与[button prafabs] 一个是场景中自己建的button 一个是prefabs里的模板
b.在【character instantiation】脚本中添加【spawn point】可直接把本object的transform传入
c.在最底添加4个人物模板。用于做传输声音的媒介 -
往场景中添加两个按钮。一个用于触发多人语音事件(未验证),一个用于开启话筒的事件
a.在多人语音按钮中添加一个事件
a).传入新建的object【photonVoice Scene Object】并调用【push to talk script】里面的【ontogglebaluechanged】方法
b.在【push to talk button】按钮中添加【push to talk script】里面的 开关函数
-
新增一个object并且加入 【photon voice speaker】和【photon voice recorder】, 并取消勾选recorder
如何开启手机麦克风
- https://github.com/cbaltzer/UnitySpeakerFix
- 下载上述链接的工程。并且在自己的工程中导入下载的工程里面的脚本
- 在开启语音通讯的时候添加 iPhoneSpeaker.ForceToSpeaker()
PhotonNetwork 多端公网数据同步
下载插件PhotonNetwork
在商店中下载插件PhotonNetwork (如果要使用voice,就下载PhotonVoice这个插件),要使用他就必须在官网中注册并且申请appid。
填入id
- 用下面的方法生成的gameobject就可以做到自动同步到所有加入到房间的电脑中
PhotonNetwork.Instantiate("ShareData", Vector3.zero, Quaternion.identity, 0);
//ShareData是存在于Resources文件夹中的gameobject,在这个gameobject中必须加有PhotonView这个组件。如果想要这个gameobject的transform同步。就可以再加入PhotonTransform,然后把这个组件拖入photonview中
//photonNetwork生成的gameobject有一个特点。如果是本机生成的对他进行transform操作,他就会同步到所有端,但如果不是本地生成的。再别的端进行操作,会出现只修改了本地的状态这种现象
//有一个方法可以判断是否是本地生成的
//gameobject.GetComponent<PhotonView>().isMine
//还有一个同步方法RPC,外界调用提供的方法 playTimeline() 即可调用所有再同房间内的该组件执行以下事件
//请开始你的表演
public void playTimeline()
{
GetComponent<PhotonView>().RPC("playTimeline_RPC",PhotonTargets.All);
}
[PunRPC]
private void playTimeline_RPC()
{
GameObject timeline = GameObject.Find("Car");
if (!timeline)
{
return;
}
timeline.GetComponent<TimeLneController>().setPlayableDirectorPlay(true);
}
如何让本地mesh和别的端的复制体进行transform同步
- 用photonnetwork进行生成mesh(mesh中必须带有photonview)
- mesh上加上同步组件
- 动态改变mesh位置,就会自动同步过去