[World]

碰撞盒触发

简单实用,实用 Udon 现成的方法:OnCollisionEnter(Collision collision)

实现两个物体碰撞后消失,并出现第三个物体,

创建 ABC 三个默认立方体,

在 Udon 脚本中定义两个物体,将脚本挂在A物体上,

B、C物体,拖入脚本对应位置。C物体处于未激活状态,

 [SerializeField]

 private GameObject B;

 [SerializeField]

 private GameObject C;

OnCollisionEnter(Collision collision)内:

 if ( collision.gameObject == B) //当A物体碰撞检测到的物体是B

 {

     this .gameObject.SetActive(false);  

     B.SetActive(false);

     C.SetActive (true);隐藏AB显示C

 }

记得给所有物体挂上 VRC Pickup 和 VRC Object Sync ,以便拾取

using UdonSharp;
using UnityEngine;

public class boxsystem : UdonSharpBehaviour
{
    [SerializeField]
    private GameObject B;

    [SerializeField]
    private GameObject C;

    private void OnCollisionEnter(Collision collision)
    {
        if ( collision.gameObject == B)
        {
            this.gameObject.SetActive(false);
            B.SetActive(false);
            C.SetActive (true);
        }
    }

}

QQ图片20240417123519.png

QQ图片20240417123605.png

Udon 网络同步

学习案例来自 UKeyboard 包内的源码 

Udon 里进行网络同步的两种方法:

1、通过标注

此方法适合简单的不重要的数据,当网络繁忙时,旧数据有概率被新数据覆盖。

通过将udon的网络同步Attributes特性:[UdonSynced] 

标注在成员上时,Udon会定期将其值同步给每一个玩家。

在同步前会进行序列化和反序列化,

OnPreSerialization() 预序列化 

OnDeserialization() 反序列化

 具体逻辑:

当某一玩家对标注[UdonSynced] 的成员的值进行更改后,会分别在:

进行修改的玩家上触发 OnPreSerialization() 预序列化 

接收修改的玩家上触发 OnDeserialization() 反序列化

此方法需要自行写判断,判断值是否被修改。

例如:

_sendString 标注 [UdonSynced]

text 为玩家进行的修改。

则在 OnPreSerialization() 中以此判断,对 _sendString 进行修改,以便同步给其他玩家

  if (!string.IsNullOrEmpty(text) && _sendString != text)
  {
      _sendString = text; 
  } 

在OnDeserialization()中进行判断,这里_recieveString起到个中转作用,因为OnDeserialization()和OnPreSerialization() 写在同一类中,如果发生不同玩家的同时触发,可能产生意外,此处逻辑还有待改善。

  if (!string.IsNullOrEmpty(_sendString) && _sendString != text && _sendString != _recieveString)
  {
      _recieveString = _sendString;
      text = _recieveString;
      WriteUiText(text);
  } 

2、使用 SendCustomNetworkEvent() 发送网络事件

此方法适合执行重要方法,方法必定会被所有玩家执行。 

注意是让每个玩家调用这一方法,在方法内 Networking.LocalPlayer.displayName 得到的是本地玩家而不是网络上的发送方。 

学习内容均为个人学习理解,如有错误还请在评论区指出,欢迎讨论交流 作者:伊咪塔 https://www.bilibili.com/read/cv33857766/ 出处:bilibili