精华内容
参与话题
问答
  • unityMVC设计模式一般要用Model层,而model层一般会用到单例模式,而单例写法有一摸一样,所以写个脚本偷懒一下吧一样的代码封装成基类,以后需要单例的model就继承这个积累就可以省去力气去敲单例的代码了。...

    unity用MVC设计模式一般要用Model层,而model层一般会用到单例模式,而单例写法有一摸一样,所以写个脚本偷懒一下吧一样的代码封装成基类,以后需要单例的model就继承这个积累就可以省去力气去敲单例的代码了。

    using System;
    using UnityEngine;
    using System.Collections;
    
    /// <summary>
    /// 不继承MonoBehaviour的单例类(泛型),单例类只要继承此类就行
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public abstract class Singleton<T>where T:new()
    {
        private static T instance;
    
        /// <summary>
        /// 它的继承类不需在写得到单例的方法
        /// </summary>
        /// <returns></returns>
        public static T GetInstance()
        {
            if (instance == null)
            {
                instance = new T();
            }
            return instance;
        }
        /// <summary>
        /// 在继承类中重写此方法可以将继承类的实例清空
        /// </summary>
        public virtual void Dispose()
        {
            instance = default(T);
        }
    }
    ps:因为MonoBehaviour类不能被new,所以已经继承了MonoBehaviour的类就不要继承这个类了,会报错的。

    展开全文
  • Unity3D】在Unity3d如何使用MVC框架

    千次阅读 多人点赞 2018-11-06 16:48:05
    MVC在桌面应用程序,以及网页架构上面用的比较多,那么怎么应用到Unity3d呢,下面就带大家去了解这个设计框架,以及如何在Unity中应用。 二、MVC介绍 简介 MVC全名是Model View Controller...

    推荐阅读

    一、前言

    MVC是一种比较常见的设计框架,是一种将代码的功能进行划分的一种设计框架,主要原理就是将软件用户界面和业务逻辑分离,以使代码可扩展性、可复用性、可维护性、灵活性加强。
    MVC在桌面应用程序,以及网页架构上面用的比较多,那么怎么应用到Unity3d中呢,下面就带大家去了解这个设计框架,以及如何在Unity中应用。

    二、MVC介绍

    简介

    MVC全名是Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

    Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分。
      通常模型对象负责在数据库中存取数据。
    View(视图) 是应用程序中处理数据显示的部分。
      通常视图是依据模型数据创建的。
    Controller(控制器) 是应用程序中处理用户交互的部分。
      通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
      
    MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

    模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。

    MVC的业务流程

    在这里插入图片描述

    MVC是设计模式吗

    MVC是一种设计模式,但是却不在Gof总结过的23种设计模式中,所以确切说MVC不是一个设计模式,而是多种设计模式的组合,而不仅仅只是一个设计模式。
    组成MVC的三个模式分别是组合模式、策咯模式、观察者模式,MVC在软件开发中发挥的威力,最终离不开这三个模式的默契配合。 那些崇尚设计模式无用论的程序员,请了解只要你们使用MVC,就离不开设计模式。
    组合模式只在视图层活动, 视图层的实现用的就是组合模式,当然,这里指的实现是底层的实现,是由编程框架厂商做的事情,用不着普通程序员插手。

    组合模式的类层次结构是树状的, 而我们做Web时视图层是html页面,html的结构不正是树状的吗,这其实就是一个组合模式的应用,只是浏览器厂商已经把界面相关的工作帮我们做掉了,但它确确实实是我们应用MVC的其中一部分,只是我们感觉不到罢了,这也是我们觉得View是实现起来最简单最没有歧义的一层的原因。

    除网页以外的其他用户界面程序,如WPF、Android、ASP.NET等等都是使用树状结构来组织界面控件对象的,因为组合模式就是从界面设计的通用解决方案总提炼出来的。所以与其说MVC选择了组合模式,还不如说组合模式是必定会存在MVC中的,因为只要涉及到用户界面,组合模式就必定存。事实上即使不理解组合模式,也不影响程序员正确的使用MVC,组合模式本就存在于程序员接触不到的位置。

    然而,观察者模式和策略模式就显得比较重要,是实实在在MVC中接触的到的部分。

    观察者模式有两部分组成,被观察的对象和观察者,观察者也被称为监听者。对应到MVC中,Model是被观察的对象,View是观察者,Model层一旦发生变化,View层即被通知更新。View层和Model层互相之间是持有引用的。 我们在开发Web MVC程序时,因为视图层的html和Model层的业务逻辑之间隔了一个http,所以不能显示的进行关联,但是他们观察者和收听者的关系却没有改变。当View通过http提交数据给服务器,服务器上的Model接受到数据执行某些操作,再通过http响应将结果回送给View,View(浏览器)接受到数据更新界面,这不正是一个接受到通知并执行更新的行为吗,是观察者模式的另一种表现形式。

    但是,脱离Web,当通过代码去纯粹的表示一个MVC结构的时候,View和Model间无疑是观察者和被观察的关系,是以观察者模式为理论基础的。即使在Web中因为http壁垒的原因导致真正的实现有点走样,但是原理核心和思路哲学却是不变的。

    最后是策略模式。策略模式是View和Controller之间的关系,Controller是View的一个策略,Controller对于View是可替换的, View和Controller的关系是一对多,在实际的开发场景中,也经常会碰到一个View被多个Controller引用,这即使策咯模式的一种体现,只是不那么直观而已。

    总结一下,关于MVC各层之间关系所对应的设计模式

    View层,单独实现了组合模式

    Model层和View层,实现了观察者模式

    View层和Controller层,实现了策咯模式

    MVC就是将这三个设计模式在一起用了,将这三个设计模式弄明白,MVC将毫无神秘感可言。如果不了解这三个设计模式去学习MVC,那不管怎么学总归是一知半解,用的时候也难免不会出想问题。

    三、参考文章

    深入理解MVC https://blog.csdn.net/zuiyingong6567/article/details/80150834
    MVC简介 https://www.cnblogs.com/diyunfei/p/6752618.html
    【Unity】MVC框架 https://blog.csdn.net/qq_39574690/article/details/80757261
    Unity中MVC简单应用 https://www.jianshu.com/p/acc689be52f9
    【Unity3D】手游开发实践《腾讯桌球》客户端开发经验总结 https://blog.csdn.net/q764424567/article/details/81020381
    MVC框架 https://baike.baidu.com/item/MVC%E6%A1%86%E6%9E%B6/9241230?fr=aladdin&fromid=85990&fromtitle=MVC

    四、Unity中使用MVC

    在这里插入图片描述
    本篇文章主要是讲一下我是如何在Unity中使用MVC模式,MVC模式肯定不能照搬进Unity中,所以很多东西都做了修改,以适合我的项目使用,如果有不对的地方,希望大家能指正出来。

    使用原理

    在这里插入图片描述
    代码文档结构就是这样的
    目前我了解的MVC应用到Unity中只有两种模式,一种就是先按照业务功能划分,再按照MVC划分
    在这里插入图片描述
    蛋糕心语游戏就是这种模式,使得模块更聚焦(高内聚)
    第二种就是先按照MVC划分,然后再分出来业务功能
    在这里插入图片描述
    第二种方式用多了发现随着项目的运营模块增多,没有第一种那么好维护。

    MVC的关键就在于业务划分,代码分离,其实跟三层架构比较相似,把业务层、逻辑层、数据层分开来,互相通过一个接口进行调用,但是并不知道接口是怎么实现的。

    所以现在的问题就在于如何去划分呢。

    实现:
    Model(模型层):
    在这一层主要就是存放用户的数据,UI的数据,静态字段,数据存储,以及模型贴图资源的存储
    比如说:

    • 存放静态字段
      在这里插入图片描述
    • 存放数据
      在这里插入图片描述
    • 存放模型材质字段
      在这里插入图片描述
    • 数据库增删改查操作
      在这里插入图片描述

    View(视图层)
    在这一层主要是放一些UI参数,获取UI数据,获取按钮事件等
    在这里插入图片描述
    在这里插入图片描述
    点击事件
    在这里插入图片描述

    Controller(控制层)
    这一层就是去实现业务逻辑功能,获取Model的数据,通知View层更新数据,承上启下的功能
    在这里插入图片描述

    五、实例

    就带大家实现在Untiy中使用MVC模式,实现更换图片的功能
    步骤一:设计界面
    在这里插入图片描述
    在这里插入图片描述
    步骤二:MVC搭建
    Model_Main.cs
    在这里插入图片描述
    View_Main.cs
    在这里插入图片描述
    Controller_Main.cs
    在这里插入图片描述
    在这里插入图片描述

    关于那个鼠标点击事件那个方法,在我另一篇文章中有讲到,不懂的可以去那篇帖子仔细看一下。
    https://blog.csdn.net/q764424567/article/details/82424308
    效果:
    在这里插入图片描述
    源代码已经上传到CSDN,按需下载
    https://download.csdn.net/download/q764424567/10768387

    六、总结

    PS:程序员最重要的就是总结,不然学的再多到关键时刻用不上还是白搭,总结梳理,然后写下来,当快忘了的时候可以回来看看,会有不一样的体悟哦。
    在Unity中应用MVC模式已经讲解完了,MVC模式其实就是多种设计模式的结合体,也是三层架构的改良产品,基本原理就是把业务逻辑、功能实现、数据给分开来,利于增加功能,和维护。
    俗话说的好,一千个人就有一千个哈姆雷特,每个人研究MVC之后,运用到Unity中的方法都不尽相同,方法也是很多样,我主要就是提供一个想法和思路,更多优化运用还要大家多开动脑筋咯。
    最后,再回顾一下
    Model(数据层):存放静态字段、数据存储、模型资源存储
    View(视图层):就是用户可以看到的层,指的是可以看到的UI,模型,加载和调用事件
    Controller(管理层):实现业务逻辑功能、加载模型资源、功能实现等

    展开全文
  • Unity简单MVC设计模式

    千次阅读 2018-02-22 11:05:44
    view层:using UnityEngine; public class BaseView : MonoBehaviour { BaseController _mController;... BaseModel _mModel; protected void Awake() { //new一个Controller,new一个model ...

    view层:

    using UnityEngine;
    public class BaseView : MonoBehaviour
    {
        BaseController _mController;
        BaseModel _mModel;
        protected  void Awake()
        {
            //new一个Controller,new一个model
            _mController = new BaseController();
            _mModel = new BaseModel();
            //监听model层发来的消息
            GlobalEntity.GetInstance().AddListener<int>(EnumManager.message1.m,OnGetMessageM);
        }
        private void Start()
        {
            //发消息通知Controller
            GlobalEntity.GetInstance().Dispatch(EnumManager.message1.v);
        }
        private void OnGetMessageM(int arg1)
        {
            Debug.Log("收到message1.m的值:"+arg1);
        }
        protected  void OnDestroy()
        {
            //移除model层发来的消息监听
            GlobalEntity.GetInstance().RemoveListener<int>(EnumManager.message1.m, OnGetMessageM);
            Dispose();
        }
    
        public  void Dispose()
        {
            //移除model和Controller
            _mController.Dispose();
            _mController = null;
            _mModel.Dispose();
            _mModel = null;
        }
    }
    

    Controller层:

    using System;
    public class BaseController : IDisposable
    {
        //初始化一个值
        int _mValue = 0;
        public BaseController()
        {
            //执行一些初始化的东西,比如监听View层发来的消息
            _mValue = 1;
            GlobalEntity.GetInstance().AddListener(EnumManager.message1.v, OnGetMessageV);
        }
    
        private void OnGetMessageV()
        {
            //收到消息B需要执行的操作
            _mValue = 2;
            //发消息通知Model
            GlobalEntity.GetInstance().Dispatch<int>(EnumManager.message1.c, _mValue);
        }
    
        /// <summary>
        /// 销毁函数由View层调用
        /// </summary>
        public void Dispose()
        {
            //移除View层发来的消息监听,删除初始化的一些东西
            _mValue = 0;
            GlobalEntity.GetInstance().RemoveListener(EnumManager.message1.v, OnGetMessageV);
        }
    }

    model层

    using System;
    
    public class BaseModel : IDisposable
    {
        //初始化一个值
        int _myValue = 0;
        public BaseModel()
        {
            //初始化,监听BaseController发来的消息
            _myValue = 1;
            GlobalEntity.GetInstance().AddListener<int>(EnumManager.message1.c, OnGetMessageC);
        }
    
        private void OnGetMessageC(int arg1)
        {  
            //收到Controller执行的操作
            _myValue = arg1;
            //通知View层数据已经修改,修改界面
            GlobalEntity.GetInstance().Dispatch<int>(EnumManager.message1.m, _myValue);
        }
    
        public virtual void Dispose()
        {
            //移除监听,删除初始的东西
            _myValue = 0;
            GlobalEntity.GetInstance().RemoveListener<int>(EnumManager.message1.c, OnGetMessageC);
        }
    }
    
    大致思想就是把view脚本放在unity的 gameObject上,然后由View层创建controller和model,用户操作由view层进行响应并且发消息通知Controller进行逻辑判断,Controller将判断完的结果告诉Model层,Model层修改自己保存的数据,然后告诉View层展示新的数据。而消息机制的监听与响应则由下次再写。。。
    展开全文
  • 前言 前一次使用的MVC框架是简单版通知类型实现,这次使用较复杂一点的方式来实现 ...把发布信息与Controller类分离出NotifiCenter,使得Model层 和 View层之间进行交互而不通过Controller控制层, ...

    前言

    前一次使用的MVC框架是简单版通知类型实现,这次使用较复杂一点的方式来实现

    前一次MVC框架链接:https://blog.csdn.net/liaoshengg/article/details/82150287

    但与第一种也有区别:

    把发布信息与Controller类分离出NotifiCenter,使得Model层 和 View层之间进行交互而不通过Controller控制层,

    也就是抽象出一个中介者NotifiCenter (通知发布中心)来代替控制类。

    Model

    public class MyModel : MonoBehaviour {
    
        private MyData mydata = new MyData ();
    
        //View中发送通知,进行出来
        public void UpdateScore(int s){
            mydata.Score += s;
            NotifiCenter.instance.Send ("UpdateUI", this.mydata);
        }
    
        public void UpdateLevel(int l){
            mydata.Level += l;
            NotifiCenter.instance.Send ("UpdateUI", this.mydata);
        }
    
    }
    
    public class MyData{
        public int Score = 0;
        public int Level = 0;
    }
    
    View

    public class MyView : MonoBehaviour {
    
        private Text scoreText;
        private Text levelText;
        private Button upScoreBtn;
        private Button upLevelBtn;
    
        void Awake(){
            scoreText = transform.Find ("ScoreText").GetComponent<Text> ();
            levelText = transform.Find ("LevelText").GetComponent<Text> ();
            upScoreBtn = transform.Find ("ScoreButton").GetComponent<Button> ();
            upLevelBtn = transform.Find ("LevelButton").GetComponent<Button> ();
    
            upScoreBtn.onClick.AddListener (scoreBtnOnClick);
            upLevelBtn.onClick.AddListener (levelBtnOnClick);
    
        }
    
        private void scoreBtnOnClick(){
            NotifiCenter.instance.Send ("UpdateScore", 2);
        }
        private void levelBtnOnClick(){
            NotifiCenter.instance.Send ("UpdateLevel", 3);
        }
    
        public void UpdateUI(MyData data){
            scoreText.text = data.Score.ToString ();
            levelText.text = data.Level.ToString ();
        }
    
    }
    Controller

    public class MyController : MonoBehaviour {
    
        private MyModel model;
        private MyView view;
    
        void Awake(){
            model = GetComponent<MyModel> ();
            view = GameObject.Find ("Canvas").GetComponent<MyView> ();
    
            NotifiCenter.instance.Add ("UpdateScore", model.UpdateScore);
            NotifiCenter.instance.Add ("UpdateLevel", model.UpdateLevel);
            NotifiCenter.instance.Add ("UpdateUI", view.UpdateUI);
    
        }
    }
    NotifiCenter
    public class NotifiCenter : MonoBehaviour {
    
    
        public static NotifiCenter instance;
        public Dictionary<string,Action<MyData>> dicMV;
        public Dictionary <string,Action<int>> dicVM;
    
        void Awake(){
            instance = this;
            dicMV = new Dictionary<string, Action<MyData>> ();
            dicVM = new Dictionary<string, Action<int>> ();
        }
    
        //重载
        public void Add(string key,Action<MyData> value){
    
            if (dicMV.ContainsKey (key)) {
                dicMV [key] += value;
            } else {
                dicMV.Add (key, value);
            }
    
        }
    
        public void Add(string key,Action<int> value ){
            if (dicVM.ContainsKey (key)) {
                dicVM [key] += value;
            } else {
                dicVM.Add (key, value);
            }
        }
    
        public void Send(string key,MyData para){
            if (dicMV.ContainsKey (key)) {
                dicMV [key] (para);
            }
        }
    
        public void Send(string key,int para){
            if (dicVM.ContainsKey (key)) {
                dicVM [key] (para);
            }
        }
    }
    

    实现流程


    开始初始化:
    开始的时候首先控制类先对NotifiCenter进行注册事件方法

            NotifiCenter.instance.Add ("UpdateScore", model.UpdateScore);
            NotifiCenter.instance.Add ("UpdateLevel", model.UpdateLevel);
            NotifiCenter.instance.Add ("UpdateUI", view.UpdateUI);

    不过这里因为是使用字典,要记得先初始化字典空间,再给字典添加成员

    dicMV = new Dictionary<string, Action<MyData>> ();
    dicVM = new Dictionary<string, Action<int>> ();

    然后:
    开始玩家和UI的交互(点击按钮)
    点击按钮的时候,向通知中心发布(Send)一个消息,这个消息让数据层进行数据更新;
    接着,数据更新完毕后也会向通知中心发布一个消息(Send)一个消息,这个消息让UI显示(Text)进行数据显示更新。

    展开全文
  • UnityMVC框架

    万次阅读 热门讨论 2018-06-21 11:59:06
    一、介绍MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在...
  • 大家好,我是SKODE。 小提示:选中左侧目录,可快速找到所需...导入SingletonLibrary.unitypackage。 该包中含有封装好的单例脚本 Singleton ,我们自己写的脚本继承该脚本,便让我们的脚本实现了单例。 3、...
  • The model.evaluatefunction predicts the output for the given input and then computes the metrics function specified in the model.compileand based on y_trueand y_predand returns the compute...
  • model.evaluatemodel.predict 的区别

    万次阅读 多人点赞 2019-03-14 14:28:38
    model.evaluate 输入数据和标签,输出损失和精确度. # 评估模型 loss,accuracy = model.evaluate(X_test,Y_test) print('\ntest loss',loss) print('accuracy',accuracy) model.predict 输入数据,输出...
  • The model.evaluate function predicts the output for the given input and then computes the metrics function specified in the model.compile and based on y_true and y_pred and returns the compute...
  • model.evaluate 用于评估您训练的模型。它的输出是model的acc和loss,而不是对输入数据的预测。 model.predict 实际预测,输入为test sample,输出为label。 在keras有两个预测函数model.predict_classes(test...
  • Keras官方文档: ...Keras中model.evaluate()返回的是 损失值和你选定的指标值(例如,精度accuracy)。   evaluate evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, st...
  • mode.evaluate 官方声明:传送门 输入参数: evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False) ...
  • model.evaluatemodel.predict的不同

    千次阅读 2019-09-27 13:37:59
    版权声明:本文为CSDN博主「云端浅蓝」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本...model.evaluate 输入数据和标签,输出损失和精确度. # 评估模型,不输出预测结果 loss,accuracy...
  • model.evaluate 函数原型: evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None) 输入数据和标签,输出损失值和选定的指标值(如精确度accuracy) # 评估模型,不输出预测...
  • ``` x_train, x_test, y_...[loss, sgd] = model.evaluate(test_data, y_test, verbose=1) ``` 最后一步不知道哪出了问题。。test_data, y_test都是dataframe啊 TypeError Traceback (most recent call last) ...
  • 报错处:loss,accuracy = model.evaluate(x_valid,y_valid); x_valid的维度为ndarray(624,50,5),y_valid为list(624),报错: TypeError: 'numpy.float64' object is not iterable ![图片说明]...
  • 报错处:loss,accuracy = model.evaluate(testX,testPredict);...不知道为什么报错TypeError: 'numpy.float64' object is not iterable,求解决,另外想知道model.evaluate(a,b)的a和b的维度有什么限制吗?
  • 在train set 设置了sample weight进行训练,在评估集上 设置不同的sample_weight 进行model.evaluate 时,得到AUC 不同。 这与 我想的不一样:sample weight 不参与评估 原因分析 首先 根据tensorflow 官网的代码...
  • model.evaluate(x_test_scaled, y_test)进度条显示异常 使用的是tensorflow2.0 在jupternotebook的显示如下
  • https://stackoverflow.com/questions/44843581/what-is-the-difference-between-model-fit-an-model-evaluate-in-keras
  • import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.layers import Dense,Activation from keras.models import Sequential from keras.optimizers import RMSprop ...
  • every blog every motto: one today is worth two tomorrows. ...model.evaluate(x_test_scaled,y_test) 1. 解决办法 其实也很简单只要加一个参数就行,如下。 model.evaluate(x_test_scaled,y_tes...
  • model.evaluate(x_test_scaled, y_test) 解决办法 其实也很简单只要加一个参数就行,如下。 model.evaluate(x_test_scaled,y_test,verbose=0) verbose=0 不输出“=” berbose=1 输出”=“,程序执行进度 ...
  • evaluate(self, input_fn, steps=None, hooks=None, checkpoint_path=None, name=None) 作用 使用验证集 input_fn 对 model 进行验证。 对于每一步,执行 input_fn(返回数据集的一个 batch)。 已经进行了 ...
  • 首先Keras的fit()函数传入的x_train和y_train是被完整的加载进内存的,当然用起来很方便,但是如果我们数据量很大,那么是不可能将所有数据载入内存的,必将导致内存泄漏,这时候我们可以用fit_generator函数来进行...
  • 不少帖子都解释evaluate()函数的返回值是什么,但是通常都让人看得云里雾里,其实该函数第一个返回值是损失(loss),第二个返回值是准确率(acc)。可以通过打印model.metrics_names来查看。 ...
  • The model.evaluatefunction predicts the output for the given input and then computes the metrics function specified in the model.compileand based on y_trueand y_pred and returns the compute...
  • Scikit-learn:模型评估Model evaluation

    万次阅读 2016-08-19 15:19:34
    http://blog.csdn.net/pipisorry/article/details/52250760模型评估Model evaluation: quantifying the quality of predictions3 different approaches to evaluate the quality of predictions of a model:...
  • 1. 数据集中图片和标签都需要转换成np类型的数据,图片转化为np.float32,标签转化成np.int32。 2.
  • 具体各个函数参数可以查看官方文档 evaluate/evaluate_generator evaluate接收的参数更为简单,大多数情况只需指定x和y。 evaluate_generator需要指定datagenerator。...model_func = { 'loss': tensor_angle_loss, '

空空如也

1 2 3 4 5 ... 20
收藏数 37,850
精华内容 15,140
关键字:

unitymvc中model