第一周 UGUI mvvm框架、UIText本地化、csv转json文件、从谷歌下载csv表格

第一周 新项目熟悉 UGUI mvvm框架、UIText本地化、csv表格转为json文件、从谷歌服务器下载csv表工具制作

一、UGUI Mvvm框架

第一次接触mvvm框架,首先不管是什么,先看看这个东西是怎么用的,之后再来分析一下。
首先需要再 canvas 节点上放置 Root Model View,这个脚本会在运行时最先被实例出来。
在这里插入图片描述
然后再Default Context中添加你自己写的控制脚本,这个脚本将会控制所有这个Canvas上的所有UI。接下来看看这个 Context 脚本该怎么写。

//首先脚本需要继承 MonoBehaviourContext 这样才可以挂载到Default Contexts上面去
public class ModelCtrl : MonoBehaviourContext
{
   
	#region Property Text
	//这里定义属性 Property 这里的泛型 string 对应了绑定的UI上的属性
    private readonly Property<string> _privateTextProperty = new Property<string>();
    public string Text
    {
   
        get {
    return _privateTextProperty.GetValue(); }
        set {
    _privateTextProperty.SetValue(value); }
    }
    #endregion
    //这里做一个测试效果 就是按下A然后 改变text的内容 
	private void Update()
   	{
   
       if (Input.GetKey(KeyCode.A))
       {
   
           Text = "测试";
       }
   	}
}

然后接下来我们来创建一个text
在这里插入图片描述
接下来看看,我们这个Text的属性时如何改变UI显示的。
在这里插入图片描述
我们需要在UI上挂一个 UGUI Text Binding 脚本,然后再Path中填写,在ModelCtrl中的属性名称。这样Text Binding会自动去Canvas的RootModelView中寻找Default Context,然后找到path的属性与其绑定,这样只需要修改Text字符串即可,免去了查找物体,获取组件,修改这些步骤,使得ui和逻辑分离。

如果要给一个button添加点击事件,只需要在ModelCtrl中添加点击函数

	void OnButtonClick()
   {
   
       Debug.Log("按钮被点击");
   }

然后再button上添加onclick绑定脚本,在Path中添加函数名即可。
在这里插入图片描述
如果要设置一个UI的Active,只需要设置一个bool的Property即可。

	#region Property TextActive
 	private readonly Property<bool> _privateTextActiveProperty = new Property<bool>();
   	public bool TextActive
   	{
   
       get {
    return _privateTextActiveProperty.GetValue(); }
       set {
    _privateTextActiveProperty.SetValue(value); }
   	}
   	#endregion

在这里插入图片描述
这样就可以通过设置这个bool值来控制UI的Active了。这里面还有很多其他属性的绑定。其功能会在以后的博客中慢慢演示。
在这里插入图片描述
关于mvvm框架,主要分为Model、View、ViewMode。

  • Model: 代表数据模型,数据和业务逻辑都在Model中定义,
  • View:代表UI试图,负责数据的显示;
  • ViewModel :负责监听model中数据的改变并控制试图更新,处理用户交互操作。

MVVM框架的实现原理,和其他绑定组件的用法,后面博客再详细分析,这次先简单说一下用法让大家简单感受一下使用的感觉。

二、关于文字的本地化

MVVM框架中集成了文字本地化的相关功能。
在这里插入图片描述
在Format中用 $ $引起来的内容,是可以在代码中加载输出的。例如
在这里插入图片描述
之后我们需要在Awake里将TextBinding的中的 I18NModifier 委托注册一个你自己实现的函数,那么此时当这个Text要显示的时候,会将NickName传递到委托函数中,你返回的值就是 $ $中间的内容。这样就可以将各国的语言存放到json表中,在 $ $中放入key,委托函数里面通过key去寻找对应的value返回,这样就可以做到文字的本地化。 这里做一个简单的演示。

	private void Awake()
   {
   
       TextBinding.I18NModifier += key => {
    return "별명"; };
   }

   private void Start()
   {
   
       Text = "abcd1234";
   }

在这里插入图片描述
在这里插入图片描述

三、将CSV转换成json文件。

这里主要是因为,游戏中需要将多国的语言制作成csv表格,如果要做本地化,那么就要像之前说的,解析这些csv表格,转成json文件,然后再text中绑定key值,来寻找value实现文字的本地化功能。
在这里插入图片描述
这边工具还是比较简单的,直接上代码,需要注意的是再csv中,是用逗号作为分隔符,那么如果一个item中存在逗号的时候,这个item会被双引号引起来。如下图:
在这里插入图片描述
规律呢,就是一个item中引号的个数一定是双数的,如果你发现两个逗号中的元素引号是单数的,那么这个其中一定有一个逗号是,表中带有的,你需要拼接。


using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;

public class ToolsMune
{
   

    [MenuItem("Tools/Csv2Json")]
    static void CsvToJson()
    {
   
        //Debug.Log(Application.dataPath + "/csvTable.csv");
        string[] scvline = File.ReadAllLines(Application.dataPath + "/csvTable.csv");
        string[] Language = scvline[0].Split(',');
        for (int i = 1; i < Language.Length; i++)
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值