My Avatar

omxian

好好学习,天天向上

4-Jar In Unity 编译&构建

2018年11月23日 星期五

因为工具需要维护一个没有工程的Jar文件,因此了解了下Jar包的构建与反编译。 注意如果你的Unity版本是2018或以上的话不需要这么干了,直接将对应的java文件放入工程即可调用。

反编译Jar文件

下载jd-gui将Jar文件拖入其中,顺利的话就可以看到代码了。

构建

  1. 打开Android Studio点击 File/New/New Moudule… 新建一个模块
  2. 在File/Project Structure… 选择对应模块的Dependencies下添加Unity classes.jar文件的引用(位于Unity安装目录的 Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\ 文件夹下)
  3. 添加要执行的脚本
  4. 构建(三种方式)
    • Build/Make Module 可以在\build\intermediates\packaged-classes\debug\下找到classes.jar 这个文件就是构建出来的Jar文件,构建出来的似乎是一个Debug版本,但是可以用。
    • 在terminal执行gradlew clean build,可以在\build\intermediates\intermediate-jars\release找到classes.jar,release版本。
    • 也可以使用终端的 gradlew makeJar1命令执行写在对应build.gradle的的脚本

阅读全文

3-Unity如何序列化对象[翻译]

2018年11月19日 星期一

本文从翻译

1.1了解Asset和UnityEngine.Object的区别

Asset

  • Asset是存储在Unity工程的资源文件
  • 有些Asset包含Unity原生格式的数据(如Material)
  • 另外一些non-native Asset需要处理为Unity原生格式(如FBX)

UnityEngine.Object

  • 一个集合的序列化数据共同描述资源的特定实例 (如mesh,Sprite,AudioClip,AnimationClip->都是Object的子类)
  • 大部分Object都是Unity自带的,其中有两种特殊类型:

    • ScriptableObject
      • 让开发者定义自己的数据类型,可由Unity序列化和反序列化,可在Editor窗口进行操作。
    • MonoBehaviour
      • 提供指向MonoScript的包装器(wrapper)。MonoScript是内部数据类型,用来保持特定程序集和命名空间中的特定脚本类的引用,MonoScript和MonoBehaviour本身不包含任何可执行代码。

Asset和UnityEngine.Object属于一对多的关系,一个Asset包含一个或多个Object

1.2对象间引用

  • 所有的UnityEngine.Object都可以引用其他UnityEngine.Object
  • 这些其他UnityEngine.Object有可能与其在同一个Asset文件中,也有可能是被导入的其他Asset文件
  • 如一个Material对象通常会包含其他Texture引用,这些引用通常来自其他Asset文件
  • 当序列化时,这些引用由两块独立的数据片段组成:File GUID和Local ID
  • File GUID标识目标Asset
  • 本地唯一的Local ID则标识Asset中每个Object,因为一个Asset有可能包含多个Object

File GUID 存在于Asset的meta文件

阅读全文

2-Unity Jenkins自动化构建

2018年11月16日 星期五

配置

  • 环境为windows10,Unity2018
  • 安装Jenkins,安装默认插件,按照流程走这里不表
  • Unity里面写构建脚本,见下面代码
  • Windows下写批处理脚本,见下面代码
    • 测试阶段可以直接执行批处理脚本,但注意Unity需要关闭,否则脚本无法执行
    • Unity批处理文档
  • Jenkins GUI界面中选择执行批处理,并将脚本填入

坑:Jenkins环境变量问题

在Jenkins中取不到Unity中定义的环境变量,导致发生无法定位sdk/ndk的错误。在Jenkins环境变量中配置ANDROID_HOME可以解决sdk的问题,但是ndk的问题无法解决(配置了ANDROID_NDK_HOME,但是还是提示无法定位ndk)。因此在使用时自行定义环境变量,绕过这个坑,见Unity构建代码。参考资料

代码

Unity构建代码

阅读全文

1-关于本博客 & Jekyll本地环境部署

2018年10月30日 星期二

关于本博客

本博客使用 jekyll + Github Pages 做的。

基本框架是用这老哥的博客改的,有兴趣的朋友可以检出来自己改 :)。

环境部署(windows)

  • 安装Ruby,下载Ruby安装器
  • cmd输入 gem install bundler jekyll,安装Jekyll环境
  • cmd输入 bundle install 和 gem install bundler
  • cmd/进入到网站目录 输入jekyll serve 或 bundle exec jekyll serve(Ruby版本太新)
  • 打开浏览器输入 http://localhost:4000/

阅读全文