Unity in Machine Learning
这里写目录标题
- 小尝试
- 自定义object 的属性
- C# 访问修饰符
- C# NameSpace
- Object运动
- 例1
- 例2
- Python检测 + C#
- 第1种
- 第2种
- Object 运动方式
小尝试
在UnityHub里,新建一个项目
建一个Object“Marker”
(a)右单击“Hierarchy”栏的空白处
(b)从菜单里选择"Create Empty",命名为“TheSimplestGame”
(c) 将鼠标移动到“TheSimplestGame”上右单击,从菜单里选择“3D Object”>“Cube”
(d)在有半边IDE的"Project"栏中“Assets”里面创建一个新的文件夹,命名为"Scripts".
(e)将鼠标移动到"Scripts"上右单击,从菜单里选择“Create”>“C# Scripts”
(f)将新建的C# Script拖至"Marker",成为其Child 文件。查看关联是否成功:左单击"Marker",在“Inspector”里会找到Script相关的“Component”
现在修改Main.cs 中的代码,就可以运行Unity了(注意是在Unity里面运行,而不是在vs code里运行):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class main : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}void OnDisable() {Debug.Log("Bye");}void OnEnable() { Debug.Log("Hi")}
}
自定义object 的属性
添加两个public variables,这两个属性就会显示在Unity里。只有当属性带有“public”才行。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class main : MonoBehaviour
{public string gameName = "夜游神";public int age = 26;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}void OnDisable() {Debug.Log("Bye");}void OnEnable() { Debug.Log("Hi")}
}
这样以后,属性就可以直接在Unity里改,而C# 里的当作是一个示例。
C# 访问修饰符
public:同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。 某一类型的公共成员的可访问性水平由该类型本身的可访问性级别控制。
private:只有同一 class 或 struct 中的代码可以访问该类型或成员。
protected:只有同一 class 或者从该 class 派生的 class 中的代码可以访问该类型或成员。
internal:同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。
protected internal:该类型或成员可由对其进行声明的程序集或另一程序集中的派生 class 中的任何代码访问。
private protected:该类型或成员可以通过从 class 派生的类型访问,这些类型在其包含程序集中进行声明。
C# NameSpace
player.cs
using System;
namespace Beginning.CSharp
{public struct Player { public string name;}
}
main.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class main : MonoBehaviour
{public string gameName = "夜游神";public int age = 26;// Start is called before the first frame updatevoid Start(){player = new Beginning.CSharp.Player();player.name = "007";}// Update is called once per framevoid Update(){}void OnDisable() {Debug.Log("Bye");}void OnEnable() { Debug.Log("Hi")}
}
Object运动
例1
- 关联后的Object,通过“gameObject”去更改对应属性(也可以不用,在下一个例子)。
- 关联的Object可以有用Vector2D, Vector3D重写坐标.(Update method里 )
- 在关联Object的Unity“Inspector”栏中添加新的components,比如例子中的“Rigidbody”,可以在Script中引用和运用。
public class main : MonoBehaviour
{public string gameName = "夜游神";public int age = 26;Beginning.CSharp.Player player;public Vector2 cord2D;public Vector3 cord3D;public float speed = 10f;// Start is called before the first frame updatevoid Start(){Rigidbody rb = GetComponent<Rigidbody>();if (rb != null){rb.AddForce(Vector3.up * 500f);} }// Update is called once per framevoid Update(){}void OnDisable() {Debug.Log("Bye");}void OnEnable() {Debug.Log("Hi");}
例2
- 不用“gameObject”更改,直接使用“Inspector”栏中的属性“transform”
- 以下例子可以让方块移动起来(运行unity后,按上下左右键)
public class main : MonoBehaviour
{public string gameName = "夜游神";public int age = 26;public Vector2 cord2D;public Vector3 cord3D;public float speed = 10f;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){transform.Translate(Input.GetAxis("Horizontal")*Time.deltaTime*speed, 0,Input.GetAxis("Vertical") * Time.deltaTime * speed);}void OnDisable() {Debug.Log("Bye");}void OnEnable() {Debug.Log("Hi");}
Python检测 + C#
详细Implementation 在: Python C# 通信四种方法
个人亲测了两种路子:第一种是C#里调terminal的Python 执行命令行,然后C#将terminal的print结果获取进来Unity。第二种路子用的是socket,使用的是TCP的通信方式,同时开启Python和C#脚本互相通信。
以下比较这两者的优缺点:
第1种
参考链接:
- C#里用: Process
- Python 里确保写成module friendly的
优点:
- 直接在C#里写Python 代码
- 可以C# Python互传参数
缺点:
- 需要使用pip install module
的方式,将你machine learning的代码打包进你无论是Python3.6,Python3.7 的 包内。
- 通信速度慢
第2种
参考链接:
- C# 里用:TCPListener
- Python 里用 socket
优点:
- 速度快
- 可以C# Python互传参数
缺点:
- 需要一点点Network的知识(对于IT从业者来说,这不算缺点)
注意:
由于Unity MonoBehaviour 的update()方法和TCP传接的运行速度不匹配,会有造成信息顺序不同的风险。个人建议使用Queue 将TCP从Python得到的数据存入,然后MonoBehaviour 的部分用Queue.dequeue的方式将信息顺序获取。
Object 运动方式
参考一
Unity 的运动方式仅以上参考。
个人在做Project时,Unity MonoBehaviour
中 update()
的方法只能更新一帧画面,不太适用于在里面写一次性动作。最好在Python里,写好动作。
Unity in Machine Learning相关推荐
- Classification and inference with machine learning
machine learning作业代写.代做Markdown留学生作业.代写python, C/C++编程语言作业 Project 3 Classification and inference wi ...
- bff v2ex_语音备忘录的BFF-如何通过Machine Learning简化Speech2Text
bff v2ex by Rafael Belchior 通过拉斐尔·贝尔基奥尔(Rafael Belchior) 语音备忘录的BFF-如何通过Machine Learning简化Speech2Text ...
- 吴恩达新书《Machine Learning Yearning》完整中文版 PDF 下载!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale资源 推荐人:GithubDaily,Datawhale伙伴 <Mach ...
- 吴恩达《Machine Learning》Jupyter Notebook 版笔记发布!图解、公式、习题都有了
在我很早之前写过的文章<机器学习如何入门>中,就首推过吴恩达在 Coursera 上开设的<Machine Learning>课程.这门课最大的特点就是基本没有复杂的数学理论和 ...
- 吴恩达新书《Machine Learning Yearning》完整中文版开源!
选自Github 来源:机器学习算法与自然语言处理 吴恩达新书<Machine Learning Yearning>完整中文版开源,整理给大家. <Machine Learning ...
- Auto Machine Learning 自动化机器学习笔记
⭐适读人群:有机器学习算法基础 1. auto-sklearn 能 auto 到什么地步? 在机器学习中的分类模型中: 常规 ML framework 如下图灰色部分:导入数据-数据清洗-特征工程-分 ...
- 机器学习与优化基础(Machine Learning and Optimization)
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 引用大佬Pedro Domingos的说法: ...
- Machine Learning | (12) 非监督学习-k-means
Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...
- Machine Learning | (11) 回归性能评估与欠拟合、过拟合
Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...
最新文章
- python实现二叉树的重建2 之由中序遍历和后序遍历重建
- IIC总线的时钟同步和总线仲裁
- 递归的效率问题及递归与循环比较
- 985研究生被小公司领导留了3年,【全栈最全Java框架总结
- 自由软件之父Richard Stallman及其思想
- 第007篇:易康(eCognition)中实现分类的继承
- 小游戏吃饭,睡觉,打豆豆,亲
- Windows10下安装Wamp Server(wamp5_1.7.4)-图文教程
- 你活得光鲜亮丽,父母却在低声下气
- UE4引擎源码学习笔记(一):源码整体文件结构
- 史上最详细How to Use Time Information Effectively Combining with Time Shift Module for Lipreading文章记录
- 北洋网络口打印机设置
- 练习题---acmcoder上台阶问题-用Java实现
- Web TOP10漏洞之sql注入
- Fatal error:Cannot ‘break‘ 2 levels in数据库导出错误解决
- ElasticFusion离线数据集运行结果再现问题总结
- [转]IE、FireFox、Chrome浏览器中关于URL传参中文乱码,解决兼容性问题!
- 怎么创建html元素节点,怎么用DOM创建a节点
- 如何写好软件项目的工作计划-项目假设(三)
- Mac下常用快捷键和chrome插件