@echo off
echo 完全路径:%1
echo 去掉引号:%~1
echo 所在分区:%~d1
echo 所处路径不含分区:%~p1
echo 所处路径含分区:%~dp1
echo 文件名:%~n1
echo 扩展名:%~x1
echo 文件属性:%~a1
echo 修改时间:%~t1
echo 文件大小:%~z1
pause
@echo off
echo 完全路径:%1
echo 去掉引号:%~1
echo 所在分区:%~d1
echo 所处路径不含分区:%~p1
echo 所处路径含分区:%~dp1
echo 文件名:%~n1
echo 扩展名:%~x1
echo 文件属性:%~a1
echo 修改时间:%~t1
echo 文件大小:%~z1
pause
在Unity使用Prefab过程中,我们有时候需要进行Prefab实例断开引用和替换引用的需求。实现这些需求,使用到的核心的类是PrefabUtility。PrefabUtility是一个静态类,主要用于进行Prefab的相关处理。 这里主要使用以下几种方法
断开Prefab引用的代码如下
(本文来自:http://www.cnblogs.com/CodeGize http://www.codegize.com)
TF#,即Tensorflow Sharp是Tensorflow的C#版本。得益于改项目,使得tensorflow集成到unity中成为可能。(TF#的Git:https://github.com/migueldeicaza/TensorFlowSharp)
在ml-agent中,含有一个插件,叫做TFSharpPlugin.unitypackage,包含了TF#和ml-agent。
下载地址:https://s3.amazonaws.com/unity-agents/TFSharpPlugin.unitypackage
如果下载较慢可以使用下面的地址:http://pan.baidu.com/s/1c1XArmC 密码:aej8
安装这个插件,把必要的dll文件添加到原有的工程中(也可以所有文件完全覆盖掉)。
按照官方的说明文档,在unity中选择菜单Editor->ProjectSetting->Player。在OtherSetting下的Scripting Define Symbols中添加一个宏定义ENABLE_TENSORFLOW
在这些工作准备就绪后,按照之前一文《Win10下Unity人工智能代理ml_agent环境安装》搭建环境并且最终运行tensorflow的训练模型。如果一切顺利没有问题,那么就会在ml-agents\python\models\ppo这个目录下生成一个3dball.byte文件。这个就是训练完成的模型数据。将其重命名为3dball_custom.byte(unity工程里面已经含有官方训练好的模型数据文件,也叫3dball.byte,所以这边为了区别进行了重命名)。
AI人工智能,更准确地说机器学习(machine learning)最近一年非常火热。在最近一段时间,Unity也发布了一个机器学习的工具,叫做ml-agent。
英文介绍如下:
https://blogs.unity3d.com/cn/2017/09/19/introducing-unity-machine-learning-agents/
中文介绍如下:
http://forum.china.unity3d.com/thread-27837-1-1.html
工程在Github上的地址如下
https://github.com/Unity-Technologies/ml-agents
从代码结构上看,ml-agent实现了前端用unity做表现,后端用Phython进行人工智能演算的系统。
官方推荐环境如下
Phython2/3 64位
ljupyter notebook
TensorFlow (1.0+) (Training)
Visual Studio 2017
Unity3d 2017
从Github网站上克隆(下载)ml-agent,代码,放在任意位置下。
从Unity官网下载Unity2017.2,安装。
下载地址https://store.unity.com/cn/download?ref=personal
从微软官网https://www.visualstudio.com/zh-hans/downloads/下载,运行后选择需要的模块。这边虽然有提供python的相关插件,但是我们选择后面单独安装。
从Anaconda官网安装Anaconda5.0.0
下载地址https://www.anaconda.com/download/#windows
安装后从开始菜单打开Anaconda Navigator,在左侧选择Environments。在下方菜单中点击Create创建一个环境,取名为tensorflow,python版本选择为3.6。等待环境创建完成。
从开始菜单中,打开Anacoda Prompt。
首先激活刚刚创建的环境,输入命令
activate tensorflow
输入命令安装Tensorflow
pip install –U tensorflow
等待一段时间直到安装完成。至此完成了Tensorflow最新版本的安装。(目前是1.3.0版本)
后面还要输入命令,所以暂时不要关闭窗口
完成Tensorflow安装后,继续在Anacoda Prompt中输入命令切换到ml-agent所在的目录中python目录的位置。比如ml-agent安装目录为D:\Git\ml-agent,则输入
cd D:\Git\ml-agent\python
如果你的Anaconda不是安装在ml-agent目录相同的磁盘,那么需要切换到ml-agen所在的磁盘。比如这里Anaconda的安装目录为C盘,ml-agent安装目录为D:\ml-agent,则需要切换到D盘,输入
D:
然后开始安装Demo所需的环境,输入命令
pip install .
注意,注意不要遗漏最后的点号。等待安装完成即可。此时依然不用关闭这个窗口
Unity的ml-agent提供了多干的demo。这里尝试运行3dball这个demo。
使用Unity2017打开ml-agent下unity-environment文件夹。
打开Assets\ML-Agents\Examples\3DBall目录下的scene文件。在场景中选择Ball3DAcademy下的Ball3DBrain物体,将TypeOfBrain修改为External,表示从Tensorflow中获取数据。
菜单中选择File->Build Setting,添加当前所在场景。(可以勾选Development Build以便查看输出)
点击PlayerSeting,检查设置
Resolution and Presentation -> 勾选Run in Background
Resolution and Presentation -> Display Resolution Dialog设置为disable
回到Build Setting面板,点击Build,编译到ml-agent的python目录中。名为3dball.exe
回到Anacoda Prompt命令窗口。注意一定要切换到ml-agent中python所在的目录。输入
jupyter notebook
运行之后,一方面会出现一个命令行窗口,另一方面会同时打开一个网页
点击网页中的PPO.ipynb。修改其中env_name的值为刚刚编译出来的exe名字。注意不要加exe。然后在菜单上选择Cell->RunAll
运行后,可以看到刚刚编译出来的exe被运行起来
注意几个点
虽然很多文章表明tensorflow用python3.5比较好,但是没有深入研究到底有什么影响。
由于Anaconda使用的5.0.0版本,所以默认使用的是python3.6的版本。在这样的情况下,如果创建python3.5的环境,安装tensorflow1.2,会出现运行的时候找不到tensorflow的问题。而如果使用python3.6的环境,但是安装tensorflow1.2,会出现tensorflow. TensorLayer找不到的问题。这些问题花了好多时间排查,需要注意所以最终这里使用的是Anaconda5.0.0,python3.6以及tensorflow1.3
安装依赖库的时候需要注意,一定要切换好环境。否则很可能安装到不同的环境下。这里安装前一定会输入activate tensorflow命令(tensorflow是我创建的环境名)
在Unity开发中,枚举常常被用到。但是Unity自身对于枚举值,并不能做好中文的支持。无论是Head或者ToolTip.如下例:
using UnityEngine; public class EnumTest : MonoBehaviour { public EmAniType AniType; } public enum EmAniType { Idle, Walk, Run, Atk, Hit, Die }
在unity中,tag是一个好东西,我们可以用tag来区分物体,也可以通过tag来快速地查找物体。但是美中不足的是,tag是一个字符串string。为什么说美中不足呢?
因为假如我们在一个脚本里面想要有一个Tag字段,都只能定义一个string字段。
using UnityEngine; public class TagObjFinder : MonoBehaviour { public string Tag; public GameObject[] FindGos { get; private set; } public void Start() { FindGos = GameObject.FindGameObjectsWithTag(Tag); } }
而这样的话,在编辑器中,就非常不方便填写,也非常容易出错。
无论是个人开发还是团队开发,养成好的版本管理习惯可以大大提高开发效率。常用的版本管理软件一般用SVN或者Git。尽管2者都在用,但是更加偏好SVN一些。安装TortoiseSVN就可以直接将SVN管理软件集成到Windows的Explorer中了。点击鼠标右键就会有SVN的相关菜单,可以非常方便地CheckOut项目以及Commit和Update。