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

news2024/12/29 0:11:44

目录

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

前言

最近公司放年假了,没什么事做,所以来公司学习(蹭吃蹭喝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.coloradmin.cn/o/170726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS总结笔记+案例

此文章属于前端篇中的第二节CSS样式 继前期HTML标记语言 CSS总结笔记&#xff1a; 3.CSS样式 css&#xff0c;专门用来“美化”标签。 基础CSS&#xff0c;写简单页面&看懂&改。模块、调整和修改 3.1CSS应用方法 1.在标签上 - 高度和宽度样式&#xff1a; <i…

linux基本功系列之alias命令实战

本文目录 文章目录前言&#x1f680;&#x1f680;&#x1f680;一. alias命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看系统已经存在的别名3.2 设置别名的操作3.3 取消别名3.4 alias的全局生效和当前用户生效四. 使用命令的注意事项总结前言&#x1f680;&#x1f680;…

行云洞见 | 为什么说云端IDE代表未来趋势?

原文作者&#xff1a;行云创新解决方案架构师 李楠 预知未来最可靠的方法是了解历史&#xff0c;让我们简单回顾下IDE的发展史。 所谓IDE&#xff0c;即集成开发环境&#xff0c;是软件开发人员在他们用于编程的计算机本地安装的应用程序。伴随着计算机编程语言从第一代机器语…

【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(万用表)】

目录 序言 &#x1f34d;放置虚拟仪器仪表 &#x1f349;万用表 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI Multisim 14.0&#xff0c;打开如图所示的启动界面&#x…

【虹科分享】虹科ATEasy软件,您的测试执行和开发专家!

测试和执行专家 虹科ATEasy是功能测试&#xff0c;自动测试系统&#xff0c;数据采集&#xff0c;过程控制和仪表系统的测试执行和快速应用开发框架。虹科ATEasy提供开发&#xff0c;部署和维护软件组件的所有必要工具&#xff0c;包括仪器驱动程序&#xff0c;测试程序&#x…

SGA与PGA的区别

前几天有被别人问到什么是SGA和PGA&#xff0c;说实在的&#xff0c;之前一直搞分布式&#xff0c;已经基本把单机里面的这两个概念忘记的差不多了&#xff0c;不过当时还是根据自己的一点数据库经验说了点七七八八&#xff0c;后来网上查了一下相关说明&#xff0c;发现自己的…

现货黄金与白银现货的区别

黄金与白银同为贵金属&#xff0c;二者均在人类货币史上担当过货币的功能&#xff0c;而现货黄金与白银现货作为其最重要的金融衍生品&#xff0c;都具备良好的收益性、流动性和的可操作性&#xff0c;都是比较理想的投资产品。那么和现货黄金和白银现货的区别在哪里呢?小编认…

C++初学者学习笔记

面向对象的程序设计 初步理解 相比较于面向过程的程序设计来说有更多的封装的函数可以使用&#xff0c;相比较来说会比较方便。但是如何去设计整个程序的思路也是需要一定的训练的。 C 简介 C 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言&#xf…

linux系统目录结构

在 Linux 或 Unix 操作系统中&#xff0c;所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。 文件系统的最顶层是由根目录开始的&#xff0c;系统使用 / 来表示根目录。在根目录之下的既可以是目录&#xff0c;也可以是文件&#xff0c;而每一个目录中又可以包含…

【荐书】C程序设计语言(第二版)

“在大多数人眼中&#xff0c;我是个一事无成、乖僻古怪、令人作呕的人。我毫无社会地位可言&#xff0c;也永远不会有。总之&#xff0c;我是底层人中的底层人。好吧&#xff0c;就算这些看法都完全正确&#xff0c;我也想有那么一天&#xff0c;通过我的作品向他们展示&#…

C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化

C模板模板初阶泛型编程函数模板函数模板概念函数模板格式函数模板的原理函数模板的实例化隐式实例化显式实例化&#xff1a;在函数名后的<>中指定模板参数的实际类型模板参数的匹配原则类模板类模板的定义格式类模板的实例化模板进阶非类型模板参数模板的特化概念函数模板…

【TypeScript】TS与Vue

TypeScript与Vue 文章目录TypeScript与VuedefineProps与TypescriptdefineEmits与Typescriptref与Typescriptreactive与Typescriptcomputed与Typescript事件处理与TypescriptTemplate Ref与Typescript可选链操作符非空断言参考链接&#xff1a;https://vuejs.org/guide/typescri…

【OpenGL学习】texture

纹理 一、什么是纹理&#xff1f; 引用百度百科的定义&#xff1a; 计算机图形学中的纹理既包括通常意义上物体表面的纹理即使物体表面呈现凹凸不平的沟纹&#xff0c;同时也包括在物体的光滑表面上的彩色图案&#xff0c;通常我们更多地称之为花纹。对于花纹而言&#xff0c…

ES6 课程概述⑦

文章目录Vuex_State安装使用State在 Vue 组件中获得 Vuex 状态mapState 辅助函数Vuex_Getter通过属性访问通过方法访问mapGetters 辅助函数Vuex_Mutation在组件中提交 Mutation提交载荷&#xff08;Payload&#xff09;对象风格的提交方式使用常量替代 Mutation 事件类型Mutati…

Spring Boot(五十六):基于Redis的搜索栏热搜功能

1 功能要求 使用SpringBoot和redis实现一个简单的热搜功能&#xff0c;具备以下功能&#xff1a; 搜索栏展示当前登陆的个人用户的搜索历史记录&#xff0c;删除个人历史记录用户在搜索栏输入某字符&#xff0c;则将该字符记录下来 以zset格式存储的redis中&#xff0c;记录该…

Flink DataSet API和DataStream API 对于WordCount的演示

文章目录准备工作Flink DataSet APIFlink DataStream API结论准备工作 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

如何多人配音一个作品?这3招帮你快速实现

大家平时喜欢听书吗&#xff1f;听书是一种既能释放双眼&#xff0c;又能降低压力的放松方式。那么大家平时在听书的时候&#xff0c;有没有碰到过一些多人配音的小说&#xff1f;大家有好奇过这样的小说是怎么来的吗&#xff1f;今天&#xff0c;教大家多人配音怎么制作的&…

请问想考软考,零基础的话,哪个证书最好考呢

可以直接考中级&#xff0c;软考中级中也有适合零基础报考的&#xff0c;中级的含金量也比初级的高&#xff0c;初级的用途不太大&#xff0c;建议直接中级。 系统集成项目管理工程师&#xff0c;软考中级比较热门的一个科目&#xff0c;零基础的也适合相比较容易通过。 软考…

Fisher确切概率基本原理详解

Fisher确切概率 基本原理 比较两组有效率是否有差异。 在周边合计不变的情况下&#xff0c;计算实际频率变动时的Pi&#xff08;概率&#xff09;。然后计算累积概率&#xff0c;依据检验水平做推断。 累积概率的计算 以a从小到大的概率排序 左侧概率&#xff1a;现有样本…

【SpringCloud17】SpringCloud Alibaba入门简介

1.为什么会出现SpringCloud Alibaba Spring Cloud Netflix项目进入维护模式官网 1.1 什么是维护模式 将模块置于维护模式&#xff0c;意味着 Spring Cloud 团队将不会再向模块添加新功能。我们将修复 block 级别的 bug 以及安全问题&#xff0c;我们也会考虑并审查社区的小型 …