02
2017
11

Unity插件开发:PrefabUtility--Prefab实例引用断开和替换

    在Unity使用Prefab过程中,我们有时候需要进行Prefab实例断开引用和替换引用的需求。实现这些需求,使用到的核心的类是PrefabUtility。PrefabUtility是一个静态类,主要用于进行Prefab的相关处理。 这里主要使用以下几种方法

  • PrefabUtility.CreateEmptyPrefab
  • PrefabUtility.ReplacePrefab
  • PrefabUtility.DisconnectPrefabInstance
  • PrefabUtility.GetPrefabParent
  • PrefabUtility.ConnectGameObjectToPrefab

断开引用

    断开Prefab引用的代码如下

More...

22
2017
10

ML-Agent:通过TF#使用训练完成的模型数据

(本文来自:http://www.cnblogs.com/CodeGize  http://www.codegize.com

安装TF#

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文件添加到原有的工程中(也可以所有文件完全覆盖掉)。

2017102201

按照官方的说明文档,在unity中选择菜单Editor->ProjectSetting->Player。在OtherSetting下的Scripting Define Symbols中添加一个宏定义ENABLE_TENSORFLOW

2017102202

准备训练完成的模型数据

在这些工作准备就绪后,按照之前一文《Win10下Unity人工智能代理ml_agent环境安装》搭建环境并且最终运行tensorflow的训练模型。如果一切顺利没有问题,那么就会在ml-agents\python\models\ppo这个目录下生成一个3dball.byte文件。这个就是训练完成的模型数据。将其重命名为3dball_custom.byte(unity工程里面已经含有官方训练好的模型数据文件,也叫3dball.byte,所以这边为了区别进行了重命名)。

使用训练完成的模型数据

  • 复制3dball_custom.byte到unity中的Assets\ML-Agents\Examples\3DBall\ TFModels下。
  • 打开Assets\ML-Agents\Examples\3DBall下的Scene场景
  • 在Hierarchy面板中选择Ball2DAcademy下的Ball3DBrain物体。
  • 在Inspector面板中,将Brain组件的Type Of Brain设置为Internal(如果没有这个选项,说明没有在PlayerSetting中设置宏定义)。将Graph Model设置为我们刚刚训练完成的那个模型数据3dball_custom。

2017102203

More...

15
2017
10

Win10下Unity人工智能代理ml_agent环境安装

简介

        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

隆ml-agent代码库

        从Github网站上克隆(下载)ml-agent,代码,放在任意位置下。

安装Unity2017.2

        从Unity官网下载Unity2017.2,安装。

        下载地址https://store.unity.com/cn/download?ref=personal

安装VS2017

        从微软官网https://www.visualstudio.com/zh-hans/downloads/下载,运行后选择需要的模块。这边虽然有提供python的相关插件,但是我们选择后面单独安装。

安装Anaconda

        从Anaconda官网安装Anaconda5.0.0

2017101501

        下载地址https://www.anaconda.com/download/#windows

        安装后从开始菜单打开Anaconda Navigator,在左侧选择Environments。在下方菜单中点击Create创建一个环境,取名为tensorflow,python版本选择为3.6。等待环境创建完成。

2017101502

安装Tensorflow及其依赖库

        从开始菜单中,打开Anacoda Prompt。

        首先激活刚刚创建的环境,输入命令

activate tensorflow

2017101503

        输入命令安装Tensorflow

pip install –U tensorflow

        等待一段时间直到安装完成。至此完成了Tensorflow最新版本的安装。(目前是1.3.0版本)

        后面还要输入命令,所以暂时不要关闭窗口

安装ml-agent依赖库

        完成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程序

        Unity的ml-agent提供了多干的demo。这里尝试运行3dball这个demo。

        使用Unity2017打开ml-agent下unity-environment文件夹。

        打开Assets\ML-Agents\Examples\3DBall目录下的scene文件。在场景中选择Ball3DAcademy下的Ball3DBrain物体,将TypeOfBrain修改为External,表示从Tensorflow中获取数据。

2017101504

        菜单中选择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

2017101505

运行Jupyter Notebook

        回到Anacoda Prompt命令窗口。注意一定要切换到ml-agent中python所在的目录。输入

jupyter notebook

        运行之后,一方面会出现一个命令行窗口,另一方面会同时打开一个网页

2017101506

2017101507

        点击网页中的PPO.ipynb。修改其中env_name的值为刚刚编译出来的exe名字。注意不要加exe。然后在菜单上选择Cell->RunAll

2017101508

        运行后,可以看到刚刚编译出来的exe被运行起来

2017101509

总结

        注意几个点

  • 虽然很多文章表明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是我创建的环境名)

29
2017
07

Unity编辑器开发:官方风格的Table控件

Unity编辑器开发:官方风格的Table控件

Table控件能够非常直观地展现批量的数据。在Unity中,Light Explorer就是一个典型的具有Table控件的窗口。

20170729_1

More...

23
2017
05

Unity编辑器开发,使用CustomPropertyDrawer实现枚举中文显示

        在Unity开发中,枚举常常被用到。但是Unity自身对于枚举值,并不能做好中文的支持。无论是Head或者ToolTip.如下例:

using UnityEngine;

public class EnumTest : MonoBehaviour
{
    public EmAniType AniType;
}

public enum EmAniType
 {
     Idle,
     Walk,
     Run,
     Atk,
     Hit,
     Die
 }

QQ截图20170523065015

More...

22
2017
05

Unity生成Tag枚举代码

        在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);
    }
}

       而这样的话,在编辑器中,就非常不方便填写,也非常容易出错。

More...

15
2017
04

Unity3D集成TortoiseSVN

        无论是个人开发还是团队开发,养成好的版本管理习惯可以大大提高开发效率。常用的版本管理软件一般用SVN或者Git。尽管2者都在用,但是更加偏好SVN一些。安装TortoiseSVN就可以直接将SVN管理软件集成到Windows的Explorer中了。点击鼠标右键就会有SVN的相关菜单,可以非常方便地CheckOut项目以及Commit和Update。

20140415001_thumb3

More...

13
2017
04

unity5.6中模型动画不显示的解决方法

使用unity5.6.0f3开发VR游戏的过程中,出现了模型动画不显示,或者突然显示的情况。

其原因在于Skinned Mesh Renderer上,当这个物体不在视野内的时候,默认会停止这个物体上的动画,导致人物消失或者动画停止之类的问题。

More...

06
2017
04

steamvr1.2在unity5.6中手柄位置丢失的修复办法

steamvr1.2版本在unity升级到5.6时,可能会出现手柄无法追踪的问题。造成这样的原因,其实在steamvr1.2的说明中注明了

20170406210851

More...

03
2017
04

在Unity编辑器中增加脚本的中文说明

        在游戏中,程序,美术,策划甚至音效都是分工合作的。很多时候,对于unity3d中一堆英文,大家都会看得很郁闷。尤其是不同的程序员,命名方式也不尽相同,甚至还是用拼音。因此,在脚本中增加一些中文显示,就能够很好地解决这个问题。

        首先,unity中对于字段(Field)已经有了很好的中文显示方法[Header]标签

More...