Unity的Mvc模式的Model层的数据绑定


设计模式: “#委托事件”

数据绑定的构成;

  • 绑定源
  • 绑定目标
  • 绑定对象

绑定源

用于绑定的数据源,可以是任意类的实例,绑定源是数据的提供者或发送者。它可以是一个变量、属性、字段、方法或其他对象。绑定源负责维护数据的状态,并在数据发生更改时通知绑定目标。在Unity中,绑定源可以是游戏对象的组件或脚本中的变量。
``用来绑定的基类;

    /// <summary>
    /// 实现INotifyPropertyChanged接口来协助数据源进行绑定;
    /// </summary>
    public abstract class BindableBase : INotifyPropertyChanged
    {
        /// <summary>
        /// 用于数据绑定的事件;
        /// </summary>
        public event PropertyChangedEventHandler? PropertyChanged;

        /// <summary>
        /// 检查属性值是否发生改变,如果改变立刻通知事件的订阅者;
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="storage">当前属性值</param>
        /// <param name="value">更改的值</param>
        /// <param name="propertyName">更改的属性名,使用了CallerMemberName可以自动通知订阅者更改的属性名</param>
        /// <returns></returns>
        protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null!)
        {
            if (object.Equals(storage, value)) return false;
            storage = value;
            OnPropertyChanged(propertyName);
            return true;
        }

        /// <summary>
        /// 触发事件告知订阅者;
        /// </summary>
        /// <param name="propertyName"></param>
        protected void OnPropertyChanged([CallerMemberName] string propertyName = null!)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

绑定目标

绑定目标是数据的接收者或接收方。它可以是一个变量、属性、字段、方法或其他对象。绑定目标用于接收绑定源发送的数据,并在数据更新时进行相应的处理。在Unity中,绑定目标可以是UI元素(如文本框、滑块等)的属性或其他游戏对象的组件。

绑定对象

绑定对象是连接绑定源和绑定目标的中间件。它负责建立和管理绑定源和绑定目标之间的关联关系,并确保数据的变化能够在它们之间传递。在Unity中,可以使用Unity的UI系统、Unity的事件系统或自定义脚本来实现绑定对象。

单向绑定和双向绑定

单项绑定

单向绑定是指数据的传递和同步只在一个方向上进行,从绑定源到绑定目标。在单向绑定中,当绑定源的数值发生变化时,这些变化会自动传递给绑定目标,使其保持与绑定源同步。然而,当绑定目标的数值发生变化时,这些变化不会反向传递给绑定源。

适用情况:

  • 当只需要将数据从一个对象传递到另一个对象时,而不需要在绑定目标上修改数据并将更改传递回绑定源时,可以使用单向绑定。
  • 单向绑定适用于只需将数据从一个对象显示到另一个对象或执行一些只读操作的情况。
    ``示例:
using UnityEngine;
using UnityEngine.UI;

public class DataBindingExample : MonoBehaviour
{
    public Text nameLabel;
    public Slider healthSlider;

    private string playerName = "Player";
    private float playerHealth = 100f;

    private void Start()
    {
        // 将nameLabel的文本与playerName变量进行绑定
        nameLabel.text = playerName;

        // 将healthSlider的值与playerHealth变量进行绑定
        healthSlider.value = playerHealth;
    }

    public void UpdatePlayerName(string newName)
    {
        // 当输入框文本发生变化时,更新playerName变量并同步到nameLabel
        playerName = newName;
        nameLabel.text = playerName;
    }

    public void UpdatePlayerHealth(float newHealth)
    {
        // 当滑块值发生变化时,更新playerHealth变量并同步到healthSlider
        playerHealth = newHealth;
        healthSlider.value = playerHealth;
    }
}

双向绑定

双向绑定是指数据的传递和同步在两个方向上进行,既可以从绑定源到绑定目标,也可以从绑定目标到绑定源。在双向绑定中,当绑定源的数值发生变化时,这些变化会自动传递给绑定目标,同时当绑定目标的数值发生变化时,这些变化也会反向传递给绑定源。

适用情况:

  • 当需要在绑定源和绑定目标之间实现双向数据传递和同步时,例如在表单中输入数据并自动更新数据模型,可以使用双向绑定。
  • 双向绑定适用于需要在绑定源和绑定目标之间进行交互和动态更新的情况。
    ``示例:
using UnityEngine;
using UnityEngine.UI;

public class TwoWayBindingExample : MonoBehaviour
{
    public InputField nameInput;
    public Text nameLabel;

    private string playerName = "Player";

    private void Start()
    {
        // 将nameInput的onValueChanged事件与UpdatePlayerName方法进行绑定
        nameInput.onValueChanged.AddListener(UpdatePlayerName);

        // 将playerName与nameLabel进行双向绑定
        UpdateNameLabel();
    }

    private void UpdatePlayerName(string newName)
    {
        // 当输入框文本发生变化时,更新playerName变量并同步到nameLabel
        playerName = newName;
        UpdateNameLabel();
    }

    private void UpdateNameLabel()
    {
        // 将playerName的值更新到nameLabel
        nameLabel.text = playerName;
    }
}

总结

单向绑定适用于只需将数据从一个对象传递到另一个对象的情况,而双向绑定适用于需要在绑定源和绑定目标之间实现双向数据传递和同步的情况。选择使用哪种绑定方式取决于您的具体需求和场景。有时候,单向绑定足够满足需求并且更简单,而在其他情况下,双向绑定可以提供更强大的交互性和实时更新的功能。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity 数据驱动面部技术是一种通过使用数据来模拟和控制人物面部动画的方法。在传统的动画制作中,艺术家通常需要绘制大量的关键帧来实现面部表情的变化,而这种方法耗时且繁琐。数据驱动面部技术则提供了更高效和自动化的替代方案。 Unity 数据驱动面部技术的核心是面部捕捉和人脸识别技术。通过使用面部捕捉设备,如3D扫描仪或摄像头,可以捕捉到人物的面部运动和表情。这些数据经过处理和分析后,可以生成面部的关键参数,如眼睛的闭合程度、嘴巴的张合程度和眉毛的抬升程度等。 一旦获得了这些关键参数,就可以将其应用到虚拟角色的面部模型上。通过与模型进行实时的数据绑定,可以使角色的面部表情与捕捉到的面部动作一致。这种数据驱动的方法不仅可以提供高度逼真的面部动画,还可以根据实时输入的数据进行动态的调整。 Unity 数据驱动面部技术的应用非常广泛。它可以应用于游戏开发、电影制作和虚拟现实等领域。在游戏开发中,数据驱动面部技术可以使角色的面部表情更加生动,增强角色的表现力。在电影制作中,它可以帮助制作逼真的角色动画,减少后期制作的工作量。在虚拟现实中,数据驱动面部技术可以提供更真实的虚拟角色,增强用户的沉浸感。 总之,Unity 数据驱动面部技术是一种通过使用数据来模拟和控制人物面部动画的方法。它通过面部捕捉和人脸识别技术,可以高效地生成准确的面部表情,并广泛应用于游戏开发、电影制作和虚拟现实等领域。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值