委托和事件、协程

因为想要剖开重建网格,看一下内部的信息,所以需要传递平面的移动信息。

委托:委托是一个类型安全的函数指针,用于引用方法。它允许将方法作为参数进行传递。

事件:事件是委托的包装,提供了一种发布/订阅的机制。它允许一个类或对象通知其他类或对象某个事件发生。

事件 OnMoveValueChanged 会在 OnSliderValueChanged 方法中被触发。因此,事件会在每次 OnSliderValueChanged 方法执行时触发。

以下是平面挂载的代码

public class MovePlane : MonoBehaviour
{
    public Slider slider;
    internal  float MoveValue = 2.0f;
    // 定义委托和事件
    public delegate void MoveValueChanged(float newValue);
    public static event MoveValueChanged OnMoveValueChanged;

    void Update()
    {
        OnSliderValueChanged();
    }

    public float OnSliderValueChanged()
    {
        // 计算新的Y轴位置
        MoveValue = (float)(slider.value * 4.75);

        // 更新平面对象的Y轴位置
        Vector3 newPosition = this.transform.position;
        newPosition.z = MoveValue;
        this.transform.position = newPosition;

        // 触发事件
        OnMoveValueChanged?.Invoke(MoveValue);

        return MoveValue;
    }
}

 OnMoveValueChanged是定义的事件。

?. 操作符是 C# 6.0 引入的可空操作符(null-conditional operator)。它用于在调用前检查左侧的对象是否为 null。如果 OnMoveValueChanged 为 null,它将跳过后面的 Invoke 方法调用,防止 NullReferenceException 异常。

Invoke(MoveValue)是触发事件的方法,向所有订阅者传递 MoveValue 作为参数。

在text上挂载以下代码

public class 获取滑动条数值 : MonoBehaviour
{

    public Text text;
    void OnEnable()
    {
        // 订阅事件
        MovePlane.OnMoveValueChanged += UpdateText;
    }

    void OnDisable()
    {
        // 取消订阅事件
        MovePlane.OnMoveValueChanged -= UpdateText;
    }

    void UpdateText(float newValue)
    {
        // 更新Text对象
        text.text = $"重构高度位置:{newValue}";
    }
}

StartCoroutine 启动的协程在 Unity 的主线程上运行,它的执行频率和 Update 方法类似,但具体的执行次数和频率取决于协程内部的 yield return 语句以及协程的逻辑。

当 StartCoroutine 被调用时,协程会立即开始执行,直到遇到第一个 yield return 语句为止。

 yield return new WaitForSeconds(1f);

等待一秒继续执行协程。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值