Unity学习笔记--如何在Unity中把自己的代码打包成dll给别人使用?(纯保姆式教学,看完还不会,今晚八点,来沙城砍我)
Posted 就一枚小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity学习笔记--如何在Unity中把自己的代码打包成dll给别人使用?(纯保姆式教学,看完还不会,今晚八点,来沙城砍我)相关的知识,希望对你有一定的参考价值。
目录
前言
最近公司放年假了,没什么事做,所以来公司学习(蹭吃蹭喝ing)
突然记起来,秋招的时候,有面试官问我:如何在Unity中把自己写的代码给别人或者其他项目使用?
当时知道是利用C#的程序集来做,但是问我具体该怎么处理,我就不知道了,因为当时只有理论知识,没有实践过
所以这次来实践下。也将这个知识分享给大家~
Tips:本文章需要提前了解程序集,也就是Assembly的知识,如果不知道,可以先百度下。
背景
小A同学和小B同学都是程序员,现在小B同学需要一些工具类,但是他现在没有时间写,于是找到了小A,麻烦小A帮自己写几个工具。一个操作文件的工具,一个Json序列化反序列化工具。顺便也写一个简单的控制角色移动的脚本。
小A任务Get
- 操作文件的工具
- Json序列化反序列化工具
- 控制角色移动的脚本
步骤一
小A先打开了Unity,并且创建了一个空项目,比如叫做TestAssembly。
然后在Assets下生成了一个文件夹:Scripts,下面又新建了两个文件夹:3C和Tools。
步骤二
在Tools文件夹下新建FileTools和JsonTools脚本,并且编写代码
FileTools.cs
using System.IO;
namespace MyTools
public static class FileTools
public static string ReadAllText(string file_path)
if (!File.Exists(file_path)) return null;
return File.ReadAllText(file_path);
public static string[] ReadAllLines(string file_path)
if (!File.Exists(file_path)) return null;
return File.ReadAllLines(file_path);
JsonTools.cs
using System.Collections;
using UnityEngine;
namespace MyTools
public static class JsonTools
public static string ToJson(object obj)
return JsonUtility.ToJson(obj);
public static T FromJson<T>(string json)
return JsonUtility.FromJson<T>(json);
public static void FromJsonOverwrite(string json, object obj)
JsonUtility.FromJsonOverwrite(json, obj);
步骤三
在3C文件夹下新建Move脚本,并且编写代码
Move.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace ThreeControl
public class Move : MonoBehaviour
[SerializeField] private float speed = 2f;
private void Update()
if (Input.GetKey(KeyCode.W))
transform.position += speed * transform.forward * Time.deltaTime;
步骤四(关键!!!)
现在是最关键的步骤了
我们在Tools文件夹下右键,点击Create下的AssemblyDefinition。并且命名为:ToolsAssembly
之后3C文件夹下同理,命名为:ThreeControl
步骤五
这个时候我们先右键Assets文件夹,点击Show in Explorer
之后进入 Library/ScriptAssemblies 文件夹下,发现多了两个dll文件:ThreeControl.dll 和 ToolsAssembly.dll
步骤六
这个时候我们就可以换到小B的视角
新建一个Unity项目,比如叫做Test
然后在Assets文件夹下新建两个子文件夹:Scripts 和 Plugins
步骤七
这个时候我们可以把小A写的两个 dll 文件拿来了,在资源管理器下把ThreeControl.dll 和 ToolsAssembly.dll直接拖入到Test项目中的Plugins下。
我们发现ThreeControl里面有一个Move脚本,这就是我们小A写的脚本了。
步骤八
在Scripts文件夹下新建一个 Test.cs 脚本,并且编写代码,我们发现可以使用 FileTools 和 JsonTools 了
Test.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MyTools;
public class Test : MonoBehaviour
Data data_template_1 = new Data(1, "Xiao A");
Data data_template_2 = new Data(2, "Xiao B");
private void Awake()
string data_1_json = JsonTools.ToJson(data_template_1);
string data_2_json = JsonTools.ToJson(data_template_2);
Data data_1 = JsonTools.FromJson<Data>(data_1_json);
Data data_2 = new Data(0, "Xiao C");
JsonTools.FromJsonOverwrite(data_2_json, data_2);
print(data_1);
print(data_2);
public class Data
public int age;
public string name;
public Data(int age_in, string name_in)
age = age_in;
name = name_in;
public override string ToString()
return $"age, name";
步骤九
把 Test.cs 拖到 Main Camera 下
运行游戏
步骤十
还记得我们之前写的 Move.cs 吗
我们在Hierarchy下新建一个 Cube ,并且在 Hierarchy 下点击 Cube ,点击 AddComponent ,就可以找到 Move.cs 了,然后添加。
运行游戏,发现我们按下 W 键, Cube 可以朝前方移动
总结
- 先写好自己的代码
- 然后在对应位置生成Assembly Definition
- 找到生成的dll文件,并且发给其他人或上传到代码仓库
- 其他人下载dll文件并且拖入到Unity项目中,就可以使用了
Unity 学习笔记:认识Unity
Unity是什么?
Unity是patterns & practices团队开发的一个轻量级、可扩展的依赖注入容器,具有如下的特性:
- 它提供了创建(或者装配)对象实例的机制,而这些对象实例可能还包含了其它被依赖的对象实例。
- Unity允许将预先配置的对象注入到类中,实现了inversion of control (IoC)的功能。在Unity中,支持constructor injection(构造器注入), property setter injection(属性设值注入)以及method call injection(方法注入)。ps:这里的方法注入与Martin Fowler定义的接口注入类似而稍有区别。
- 支持容器的体系结构。一个容器可以有子容器,允许从子容器到父容器的对象定位查询。
- 可以通过配置文件进行准备和配置容器。
- 不会影响到类的定义(属性设值注入和方法注入除外),这也是轻量级容器的一个体现。
- 支持自定义的容器扩展。
IoC又是什么?
IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection)
IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。 所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。
简单地说,就是应用本身不负责依赖对象的创建和维护,而是将其交给一个外部容器来负责。这样控制权就由应用转移到了外部IoC 容器,即控制权实现了所谓的反转。比如在类型A 中需要使用类型B 的实例,而B 实例的创建并不由A 来负责,而是通过外部容器
来创建。通过IoC 的方式实现针对目标Controller 的激活具有重要的意义。
Unity安装
使用VS自带工具,NuGet管理器进行安装,如图所示。
Unity简单示例
创建Unity容器
IUnityContainer container = new UnityContainer();
创建接口映射
container.RegisterType<ILogger, MyLog>();
获取对象实例
ILogger log = container.Resolve<ILogger>();
本文链接: 文章作者:雨~桐 文章出处:http://www.cnblogs.com/piscesLoveCc/ 如果您觉得阅读本文对您有帮助,请点一右下角的“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
以上是关于Unity学习笔记--如何在Unity中把自己的代码打包成dll给别人使用?(纯保姆式教学,看完还不会,今晚八点,来沙城砍我)的主要内容,如果未能解决你的问题,请参考以下文章
Unity学习笔记--如何在Unity运行cmd?并且在Unity中利用cmd操作svn(例如生成svn--diff文件)