【编程语言发展史】Unity开发语言的历史发展
Unity开发前期版本时,使用的是一种名为UnityScript的类似JavaScript的语言。然而,随着时间的推移,开发者社区大多数人都倾向于使用C#进行开发,Unity决定将重点放在C#上,因为C#具有更强大的生态系统、更好的性能和更广泛的开发者社区支持。因此,Unity在后续版本中逐渐弃用了UnityScript,将C#作为首选的开发语言。

C#的跨平台实现
如今我们都已经习惯了在Unity中使用C#,代码便捷的编写程序而无需关心我们的代码如何实现跨平台:跨平台这件事情似乎非常理所当然。
C#是微软基于.net框架实现的,自身并不支持跨平台,在.NetCore出现之前甚至无法运行在Windows之外的设备上,为了实现跨平台的目标,Unity引擎选择了Mono作为其主要的脚本运行时环境。
Mono是一个开源的、跨平台的.net框架实现,可以简单理解为一个虚拟机,它使得C#代码可以在各类桌面和移动设备上完美运行,也解决了跨平台的大问题。借助Mono的跨平台能力,Unity也在前些年的市场竞争中突飞猛进。

IL2CPP
虽然Mono解决了一个大问题,但明显没有解决所有问题。Mono毕竟不是Unity自己的产品,更新迭代慢,新特性支持延后,无法使用C#新特性...但重点还是安全性和性能,Unity占领的是移动端市场,而移动设备对性能非常敏感。
从2014年开始,Unity正式引入了IL2CPP编译器。IL2CPP将C#脚本编译为C++代码,然后进一步编译为本地机器代码,从之前的JIT,变成了AOT。通俗来讲,IL2CPP移除了上面提到的”Mono虚拟机“,省去了中间环节。
IL2CPP的优势主要体现在以下几个方面:
性能优化:通过将C#脚本编译为本地机器代码,IL2CPP消除了脚本解释和执行的开销,大大提高了游戏的性能。它可以在游戏运行时进行更高效的代码优化和内存管理。
64位支持:自从Apple决定自从2015年开始,App必须支持64位架构之后,移动端的64位时代也已经来临。而Unity集成的Mono在移动端暂时没有64位实现,这也就意味着,若要进行应用/游戏的分发,就必须使用IL2CPP。
平台兼容性:IL2CPP可以将C#代码编译为与目标平台相关的本地代码,从而实现更好的平台兼容性。无论是在PC、主机还是移动设备上,IL2CPP都可以生成与平台紧密集成的代码。
安全性:由于IL2CPP编译为本地机器代码,它提供了更高的代码安全性,减少了脚本易受攻击的风险。
未来,Unity团队将继续改进和优化Mono和IL2CPP。Mono方面,他们致力于提高脚本的性能和开发工作流程,改进编辑器的响应性和稳定性,并提供更多的工具和功能来支持开发人员的创作。IL2CPP方面,他们将继续优化编译器和运行时环境,提高代码生成和优化的效果,以及进一步扩展平台的支持。

总的来说,Mono和IL2CPP在Unity中扮演着不同的角色。Mono提供了灵活的脚本运行时环境,便于快速迭代和开发游戏逻辑,而IL2CPP通过编译为本地代码,提供了更高的性能和跨平台兼容性。Unity团队将继续改进这两个技术,以提供更好的游戏开发体验和性能表现。
建议
如果您正在开发移动端应用,并准备发布到应用商店,不管是AppSotre、GooglePlay,还是国内的各大应用市场,64位支持都是必要条件,因此IL2CPP也是唯一可选项。
如果您是Window平台的内容开发者,为了性能和稳定性,也仍然强烈建议您使用IL2CPP打包。
如果您计划将您的应用分发至我们的实时云渲染平台,由于Mono虚拟机较为老旧,没有考虑到云渲染的服务器架构问题,存在Bug的潜在可能。目前已知的是,在云渲染环境下Mono和部分常用插件会有兼容性问题,因此为了应用运行的稳定性仍然强烈建议您使用现代化的IL2CPP打包。
小结
3DCAT是一种基于各类游戏开发引擎(如Unity、UE4等)的实时渲染技术,通过利用云端计算渲染和网络串流技术,能够实时制作并推送高质量的渲染内容到用户的终端设备。这项技术满足了广大用户的访问需求,无论时间和地点,用户都可以跨终端设备进行沉浸式、高互动性的体验。同时,3DCAT提供超高清的图像和视觉效果,让用户可以享受到逼真且令人惊叹的虚拟世界。无论是用于游戏、虚拟现实、建筑设计或其他应用领域,3DCAT的实时渲染能力为用户提供了前所未有的视觉体验和交互性。
相关文章:
【编程语言发展史】Unity开发语言的历史发展
Unity开发前期版本时,使用的是一种名为UnityScript的类似JavaScript的语言。然而,随着时间的推移,开发者社区大多数人都倾向于使用C#进行开发,Unity决定将重点放在C#上,因为C#具有更强大的生态系统、更好的性能和更广泛…...
springboot http添加请求头 添加请求证书
首先明确两个事情:请求对象,连接对象 我们知道你要是想发起一个请求,需要指定两个环节内容,一个是请求内容对象(request),一个是连接内容对象(httpClient) 它们两个的作用我们在下面会看到 简要分析源码 1.先说一下…...
【Qt之数据库操作】
使用Qt实现SQLite数据库操作可以分为以下几个步骤: 添加SQLite头文件和库文件: 在Qt项目中,需要在.pro文件中添加以下内容: QT sql打开/创建数据库: 可以使用QSqlDatabase类中的静态函数addDatabase()来添加数据库…...
数据结构(c语言版) 队列
链队列 要求:实现链队列的创建、初始化、入队、出队 (先进先出) 代码 // // Created by My.cy on 2023/10/19. // //链队列 创建、初始化、入队、出队 先进先出#include <stdio.h> #include <malloc.h>//定义结构体 struct…...
kimera论文阅读
文章目录 功能构成:Kimera线程A. Kimera-VIO:B. Kimera-RPGO:C. Kimera-Mesher:D. Kimera-Semantics:E.调试工具 功能构成: Kimera包括四个关键模块: Kimera-VIO的核心是基于gtsam的VIO方法[45],使用IMUpreintegration和无结构视觉因子[27]…...
golang gorm通过泛型实现通用单表增删改
golang gorm通过泛型实现通用单表增删改 无废话,直接上代码 想实现通用,首先得实现查询的通用,可以用传递map实现 func Where(where map[string]interface{}) func(db *gorm.DB) *gorm.DB {return func(db *gorm.DB) *gorm.DB {dbTmp : db…...
十、K8S之ConfigMap
ConfigMap 一、概念 在K8S中,ConfigMap是一种用于存储配置数据的API对象,一般用于存储Pod中应用所需的一些配置信息,或者环境变量。将配置于 Pod 分开,避免应为修改配置导致还需要重新构建 镜像与容器。 二、创建 可以使用 ku…...
python飞书群机器人通过webhook发送消息
python飞书群机器人通过webhook发送消息 import json import loggingimport requestslogger logging.getLogger(__name__) logging.basicConfig(levellogging.DEBUG)class FeishuTalk:"""飞书群机器人通过webhook发送消息"""def __init__(self…...
埃隆·马斯克的 AI 聊天机器人 Grok 已经上线
昨天,埃隆马斯克 (Elon Musk) 通过他的公司 xAI 推出了一款名为 Grok 的新型人工智能聊天机器人。这款新的聊天机器人将通过 Twitter 更新实时获取世界知识,使其成为最新的对话 AI 系统。 Grok 的独特和基本优势在于它可以通过 𝕏 平台实时了…...
【代码随想录】算法训练营 第十五天 第六章 二叉树 Part 2
102. 二叉树的层序遍历 层序遍历,就是一层一层地遍历二叉树,最常见的就是从上到下,从左到右来遍历,遍历的方法依然有两种,第一种是借助队列,第二种则是递归,都算是很简单、很容易理解的方法&am…...
使用ssl_certificate_by_lua指令动态加载证书
1、下载 OpenResty - 下载 根据自己系统选择下载,我的是64位 2、解压到目录 3、启动openresty 进入解压后的目录,执行nginx.exe 浏览器输入 http://localhost 查看是否正常。显示以下画面就表示没有问题。 接下来可以开始准备动态安装证书 4、使用o…...
Qt中Opencv转Qimage出现重影或者颜色不对
废话不多说 在qt中opencv获取的图像转qimage时出现重影原因: 图像数据的内存对齐可能会导致画面重影,如果出现误差转换出来的图就会出现重影 解决办法: cv::Mat image_bgr cv::imread(“example.jpg”); cv::Mat image_aligned; cv::copyMak…...
upload-labs-1
文章目录 Pass-01 Pass-01 先上传一个正常的图片,查看返回结果,结果中带有文件上传路径,可以进行利用: 上传一个恶意的webshell,里面写入一句话木马: <?php eval($_POST[cmd]); echo "hello&quo…...
【vite配置路径别名@】/启动配置
npm install types/node --save-dev npm install path --save import { defineConfig } from vite import vue from vitejs/plugin-vue // 配置别名 import { resolve } from "path";// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()]…...
3. List
数据结构在Java集合中的对应关系 线性表【数组】 -> ArrayList 线性表【链表】-> LinkedList 队列 -> Queue -> LinkedList,PriorityQueue, ArrayBlockingQueue … etc. 双端队列 -> Deque -> ArrayDeque 栈 -> LinkedList 哈希表 -> Hash…...
Django初窥门径-oauth登录认证
引言 在现代Web应用程序中,用户身份验证和授权是至关重要的组成部分。Django,一个流行的Python Web框架,为用户身份验证提供了内置支持。本文将探讨如何创建和注册Django应用,自定义身份验证服务,配置AUTHENTICATION_…...
数学到底在哪里支撑着编程?
数学到底在哪里支撑着编程? 除了少数算法等明显相关情况外,说点日常的。 编程是个极度依赖逻辑的领域,逻辑严谨性好,你的编程工作会顺畅很多一-绝大多 数的bug都是最近很多小伙伴找我,说想要一些嵌入式的资料&#x…...
Python模块ADB的, 已经 pyadb
Python模块ADB的使用指南_笔记大全_设计学院 (python100.com) pip install adb Python 调用ADB_python 调用adb命令_实相实相的博客-CSDN博客 Python ADB.shell_command Examples, pyadb.ADB.shell_command Python Examples - HotExamples Gitee 极速下载/PyADB - 码云 - 开…...
猫头虎分享从Python到JavaScript传参数:多面手的数据传递术
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
注解汇总:Spring 常用的注解
前言 本栏目的内容已经讲完了,本案例将把案例中所有讲到的注解都汇总起来,方便日后的学习需要用到的时候能够快速的找到相应的注解。本案例将结合小案例一起做汇总,也想丹玉是再复习一遍讲过用过的注解。 一、注解汇总 1、Component Reposi…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
