Unity学习笔记--如何在Unity中把自己的代码打包成dll给别人使用?(纯保姆式教学,看完还不会,今晚八点,来沙城砍我)

news/2024/12/5 6:37:51/

目录

    • 前言
    • 背景
      • 步骤一
      • 步骤二
      • 步骤三
      • 步骤四(关键!!!)
      • 步骤五
      • 步骤六
      • 步骤七
      • 步骤八
      • 步骤九
      • 步骤十
    • 总结

前言

最近公司放年假了,没什么事做,所以来公司学习(蹭吃蹭喝ing)
突然记起来,秋招的时候,有面试官问我:如何在Unity中把自己写的代码给别人或者其他项目使用?
当时知道是利用C#的程序集来做,但是问我具体该怎么处理,我就不知道了,因为当时只有理论知识,没有实践过
所以这次来实践下。也将这个知识分享给大家~

Tips:本文章需要提前了解程序集,也就是Assembly的知识,如果不知道,可以先百度下。

背景

小A同学和小B同学都是程序员,现在小B同学需要一些工具类,但是他现在没有时间写,于是找到了小A,麻烦小A帮自己写几个工具。一个操作文件的工具,一个Json序列化反序列化工具。顺便也写一个简单的控制角色移动的脚本。

小A任务Get

  1. 操作文件的工具
  2. Json序列化反序列化工具
  3. 控制角色移动的脚本

步骤一

小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.dllToolsAssembly.dll
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤六

这个时候我们就可以换到小B的视角
新建一个Unity项目,比如叫做Test

然后在Assets文件夹下新建两个子文件夹:ScriptsPlugins
在这里插入图片描述

步骤七

这个时候我们可以把小A写的两个 dll 文件拿来了,在资源管理器下把ThreeControl.dllToolsAssembly.dll直接拖入到Test项目中的Plugins下。
在这里插入图片描述

我们发现ThreeControl里面有一个Move脚本,这就是我们小A写的脚本了。

步骤八

在Scripts文件夹下新建一个 Test.cs 脚本,并且编写代码,我们发现可以使用 FileToolsJsonTools
在这里插入图片描述

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 可以朝前方移动
在这里插入图片描述

总结

  1. 先写好自己的代码
  2. 然后在对应位置生成Assembly Definition
  3. 找到生成的dll文件,并且发给其他人或上传到代码仓库
  4. 其他人下载dll文件并且拖入到Unity项目中,就可以使用了

http://www.ppmy.cn/news/13090.html

相关文章

webpack-dev-server:静态资源目录配置

目录 webpack-dev-server Webpack项目-配置自动打包 访问错误信息分析 简单配置静态资源访问目录 完整配置静态资源访问目录 directory属性 staticOptions属性 publicPath属性 serveIndex属性 watch属性 完整配置webpack.config.js示例 默认显示index.html内容配置 默…

vsftpd使用指北

vsftpd使用指北 文章目录vsftpd使用指北1.安装vsftpd2.登录3.切换本地路径下载命令&#xff1a;get用于下载单个文件&#xff1a;mget用于批量下载&#xff1a;上传命令&#xff1a;FilezillaReferencevsftpd 是“very secure FTP daemon”的缩写&#xff0c;是一个完全免费的、…

【JavaEE】博客前端

目录 一、列表页 1.1导航条 1.2主题区域 1.2.1个人信息框 1.2.2 内容区 二、登录页 三、详情页 一、列表页 整体布局如下&#xff1a; 1.1导航条 导航条分为三块&#xff0c;整体都设置id为导航栏&#xff0c;然后左右分为导航栏左和导航栏右。左边靠左&#xff0c;右边靠…

自媒体神器 Previs Shot 使用指南

Previs Shot 是一款影视创作的项目管理工具&#xff0c;更高效的方式开始您的影视创作历程。分镜表分镜表可高效绘制画面、编写景别、运镜、内容、台词等&#xff0c;甚至可以填写摄影器材、灯光等信息。分镜结构场景&#xff1a;电影里比如过生日、开party都是不同的场景&…

初识redis

1.初识Redis Redis是一种键值型的NoSql数据库&#xff0c;这里有两个关键字&#xff1a; 键值型 NoSql 其中键值型&#xff0c;是指Redis中存储的数据都是以key、value对的形式存储&#xff0c;而value的形式多种多样&#xff0c;可以是字符串、数值、甚至json&#xff1a;…

【蓝桥杯】 C++ 刷题统计

文章目录题目描述输入描述输出描述实现代码注意点知识点题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题? 输入描述 输入一行包含三个…

C++动态规划超详细总结

动态规划首先来介绍一下动态规划&#xff0c;但我不想用过于官方的语言来介绍。动态规划是一种思想&#xff0c;它常用于最优解问题&#xff08;即所有问题包括所有子问题的解为最优解&#xff09;&#xff0c;它有点像递推&#xff0c;是在已知问题的基础上解决其他问题。这种…

动态内存管理(2)

TIPS 1. scanf读取与空格&#xff1a; 我们都知道&#xff0c;scanf()在从输入缓冲区里面读取数据的时候&#xff0c;如果中间碰到了空格&#xff0c;那么就会直接停下来&#xff0c;而如果在最前面有个空格&#xff0c;直接无视空格。 2. scanf()读取与\n&#xff0c;如果是…