unity的PUN如何同步自定义脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity的PUN如何同步自定义脚本相关的知识,希望对你有一定的参考价值。
参考技术A 首先启动Unity,单机菜单栏中的AssetsCreate来添加脚本。unity是一种用于多人游戏的Unity软件包。灵活的匹配可以让玩家进入房间,可以通过网络同步对象。快速和可靠的通信是通过专用的Photon服务器完成的,因此客户端连接不需要1对1。
将想要同步位置信息的物体加上PhotonTransformView,再将PhotonTransformView挂载到PhotonView的观察组件上就可以了。
在 Unity 中,通过编辑器删除另一个组件时,如何通过脚本删除一个组件?
【中文标题】在 Unity 中,通过编辑器删除另一个组件时,如何通过脚本删除一个组件?【英文标题】:In Unity, how to delete a component via script when deleting another component via the editor? 【发布时间】:2021-11-01 12:35:57 【问题描述】:上下文:我正在编辑一个预制件,上面有两个组件,都是自定义脚本。
编辑预制件时,我想在删除组件容器同步的同时删除编辑器中的组件容器描述符,方法是右键单击它并单击删除组件。见下图。
在 ContainerDescriptor 中,我参考了 ContainerSync 脚本。
public class ContainerDescriptor : MonoBehaviour
public ContainerSync containerSync;
我尝试使用 ContainerDescriptor 脚本的 OnDestroy() 方法,但是以这种方式删除 ContainerDescriptor 时不会调用它。
【问题讨论】:
【参考方案1】:On this thread 至少有一个解决方案,如果您像您一样通过上下文菜单删除该组件。
使用[ExecuteAlways]
,通常仅在 PlayMode 中调用的事件消息调用也会在 Edit 和 Prefab 模式中调用!
你可以做类似的事情,例如
[ExecuteAlways]
public class ContainerDescriptor : MonoBehaviour
public ContainerSync containerSync;
#if UNITY_EDITOR
private void OnDestroy ()
if(containerSync)
if(Application.isPlaying)
Destroy(containerSync);
else
DestroyImmediate (containerSync);
#endif
请注意,尽管专门针对预制件,这可能仍然会失败,因为 afaik 既不能在预制件内部使用 Destroy
也不能使用 DestroyImmediate
(请参阅 here)
【讨论】:
它似乎也适用于预制件,至少 DestroyImmediate 可以。以上是关于unity的PUN如何同步自定义脚本的主要内容,如果未能解决你的问题,请参考以下文章