发布时间:2026/9/1 5:26:02
Unity C# 脚本学习笔记:变量、数据类型与类型转换 一、先搞清楚值类型和引用类型C# 是强类型语言每个变量在声明时就要确定类型之后不能随便改成别的类型。不同数据类型决定了变量存的是什么、占多少内存、能做什么操作。在 Unity 脚本里我们常接触的数据类型可以分成两大类值类型直接存数据本身。比如int、float、bool、char、struct、enum。它们通常分配在栈上读写快。引用类型存的是数据在内存中的地址实际数据在堆上。比如string、class、数组、委托。赋值时拷贝的是引用两个变量可能指向同一个对象。这个区别很重要尤其是当你把一个对象赋值给另一个变量时改动一个可能会影响另一个而值类型就不会。后面讲类和对象时还会再提到。二、常用内置数据类型下面是我在 Unity 里最常用到的几种类型每种都结合具体场景说一下。1. 整型类型描述范围int32 位有符号整数约 -21 亿 ~ 21 亿long64 位有符号整数很大一般用不到short16 位有符号整数-32768 ~ 32767byte8 位无符号整数0 ~ 255Unity 中最常用的就是int比如分数、索引、层级、数量等。其他几个类型很少直接用到了解即可。intscore100;intenemyCount5;需要注意int是有符号的如果确认数值不会为负可以考虑用uint无符号 int但 Unity 内部很多 API 还是用int所以保持一致就好。2. 浮点型类型描述精度float32 位单精度浮点数约 7 位有效数字double64 位双精度浮点数约 15-16 位decimal128 位高精度小数金融计算Unity 里几乎所有的位置、速度、时间都用float。写float变量时一定要记得加后缀f否则编译器会当成double然后报错。floatspeed5.5f;doublepreciseValue3.14159265358979;// 很少用Unity API 大多只接受 floatdouble在 Unity 中偶尔用于需要高精度的计算但大多数 API 接收float所以最终还是要转。decimal基本不会在游戏逻辑里出现。3. 布尔类型bool只有两个值true和false用来做条件判断、开关状态。boolisGroundedtrue;boolhasKeyfalse;在if语句里直接写变量名就行不用写 true。4. 字符与字符串char单个 Unicode 字符用单引号。string一串字符用双引号。它是引用类型但使用起来像值类型内容不可变修改时会创建新字符串。chargradeA;stringplayerNameUnityLearner;字符串在游戏中常用但要注意频繁拼接字符串会产生 GC 垃圾后面讲性能优化时会再提。5. 枚举类型枚举是一种自定义值类型用来定义一组有名字的常量让代码读起来更直观。publicenumGameState{MainMenu,Playing,Paused,GameOver}GameStatecurrentStateGameState.Playing;相比直接用int表示状态0主菜单1游戏中…枚举可读性高得多也避免魔法数字。6. 结构体struct结构体是值类型适合表示轻量级的数据集合比如坐标、颜色、玩家属性等。Unity 内置的Vector3、Quaternion都是结构体。publicstructPlayerData{publicstringname;publicintlevel;publicfloathealth;}结构体和类的区别在于结构体赋值时是复制整个值类是复制引用。所以结构体适合小数据且不需要继承的场景。三、变量的声明与初始化声明变量很简单类型 变量名 初始值;。初始值可以不写但使用前必须赋值否则编译报错。inthealth;// 声明暂时没值health100;// 赋值floatmana50.0f;// 声明并直接初始化C# 还支持var关键字让编译器自动推断类型。但要注意var只是语法糖类型在编译时就确定了不是动态类型。vardamage25;// 推断为 intvarplayerNameTom;// 推断为 string我的建议如果类型很明显比如var x 10;用var没问题但如果类型不那么一目了然最好还是写出具体类型提高代码可读性。在 Unity 里我通常直接写明确类型因为一些组件类型很长用var反而省事但也要看上下文。四、常量与只读字段const编译时常量声明时必须赋值之后不能改。适合放一些固定值比如最大生命值、重力常数。readonly运行时常量可以在声明时或构造函数里赋值之后也不能改。适合需要在不同实例中可能不同的值。publicconstintMaxHealth100;publicreadonlyfloatgravity9.81f;在 Unity 中要注意const字段不会显示在 Inspector 面板上也就是说如果你想让策划在 Inspector 里调整数值就不能用const。readonly也不会序列化。所以如果想暴露给 Inspector 调整用public普通字段或[SerializeField] private。五、类型转换不同类型之间经常需要转换C# 里分为隐式转换和显式转换两种。1. 隐式转换自动的当目标类型能安全容纳源类型且不会丢失精度时编译器会自动转换。intintValue100;longlongValueintValue;// int 转 long安全floatfloatValueintValue;// int 转 float安全但可能丢失精度大数时int到float虽然不用写转换但float只有约 7 位有效数字太大的int转过去会丢失精度。一般游戏里数值不大问题不大。2. 显式转换强制转换当转换可能丢失数据或精度时需要手动写(目标类型)。floatfloatValue3.14f;intintValue(int)floatValue;// 结果是 3直接截断小数部分不是四舍五入doubledoubleValue123.456;inttruncated(int)doubleValue;// 123注意强制转换可能溢出或精度损失使用时要想清楚。比如float转int会把小数全部舍去如果希望四舍五入要用Mathf.RoundToInt。3. 使用 Convert 类System.Convert提供了一些转换方法如果转换失败会抛异常。stringnumberStr123;intnumberConvert.ToInt32(numberStr);// 123stringfloatStr3.14;floatpiConvert.ToSingle(floatStr);// 3.14f但在 Unity 中更常用的是Parse或TryParse因为Convert遇到非法输入会直接抛异常影响游戏稳定性。4. 字符串转数值Parse 和 TryParseParse字符串格式错误时抛异常。TryParse安全转换返回bool表示是否成功推荐使用。stringinput42;intresult;if(int.TryParse(input,outresult)){Debug.Log(转换成功result);}else{Debug.Log(转换失败可能不是数字);}在游戏里用户输入或外部数据往往不可靠一定要用TryParse避免游戏崩溃。除非你百分百确定字符串一定合法否则不要用Parse或Convert。5. 装箱与拆箱值类型转为object类型叫装箱反向叫拆箱。这个操作会带来性能开销因为要在堆上分配内存。intvalue10;objectboxedvalue;// 装箱intunboxed(int)boxed;// 拆箱在Update等频繁调用的地方尽量避免装箱拆箱否则容易产生 GC 垃圾导致卡顿。例如不要把值类型塞进ArrayList旧的非泛型集合改用Listint这样的泛型集合。六、总结变量和数据类型是 C# 最基础的部分但很多坑都藏在这里float不加f、字符串转换用错方法、值类型和引用类型搞混等等。建议刚开始学的时候多动手试把各种类型转换跑一跑看看输出结果比只看概念记得牢。

相关新闻

2026/9/1 5:26:02

超薄冰箱选购指南:594mm嵌入、零度保鲜与十字门分区解析

最近帮一位朋友看厨房改造方案,他发来一张橱柜图纸,问我:这台冰箱能不能放进去?我看了下,他量的是高和宽,独独漏了深度。结果橱柜定制师傅说要按新冰箱尺寸重做柜体,预算一下子多两千。这种事不…

2026/9/1 5:21:02

单片机毕设选题推荐:基于 STM32 或 51 单片机的红外无线多路电气控制模块设计 基于 STM32 或 51 单片机的现成遥控器解码显示控制系统设计(021005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/1 5:31:02

大模型赋能金融:小白程序员必备的智能化转型指南(含收藏)

本文深入探讨AI大模型对金融行业的革命性影响,解析其技术原理与实际应用,覆盖银行、证券、保险等核心领域,并结合工商银行、湘财证券等案例,剖析智能投研、风险管理等场景的应用模式。文章直面数据隐私、算法偏见等挑战&#xff0…

2026/9/1 5:31:02

MATLAB部署YOLOv8目标检测:跨语言调用Python接口完整指南

简介:本资源是一套在MATLAB环境下完整部署YOLOv8目标检测模型的高分实践项目,面向计算机、人工智能、自动化等专业的本科生及研究生,专为毕业设计、课程设计与期末大作业打造。项目经导师指导并获99分评审高分认可,代码可直接运行…

2026/9/1 5:31:02

MKVToolNix实战指南:无损合并音视频与多轨道封装

在视频剪辑和后期制作中,我们常常会遇到这样的场景:从网上下载了一部高清电影,但视频和字幕文件是分离的;或者自己录制了一段游戏实况,需要将录制的视频流和麦克风音频流合并成一个文件;又或者,…

2026/9/1 5:31:02

Python+PyQt5上位机开发实战:串口通信、实时曲线与打包全解析

简介:一套完整的Python上位机开发源码,覆盖界面设计、数据采集、通信协议、异常处理等关键模块,适合自动化设备调试、嵌入式交互等场景,也适合有一定Python基础、希望快速上手上位机项目的开发者参考。压缩包共55个文件&#xff0…

2026/9/1 5:31:02

Windows USB插拔痕迹清理:注册表与日志的批处理实战

简介:面向Windows用户的USB清理工具合集,整合了USBOblivion 32/64位正式版与UsbViewer设备查看器,专用于彻底清除注册表中留存的USB设备连接/断开记录,包括设备ID、序列号及首次/最后使用时间等敏感信息,适用于注重隐私…

2026/9/1 5:26:02

Python视频点播网站毕业设计:Django项目架构与实现全解析

简介:这是一份面向计算机专业本科生的毕业设计实战资源,聚焦基于Python构建的完整视频点播系统,解决在线视频浏览、分类检索与流畅播放等核心业务需求,适用于Web全栈开发能力训练与课程设计答辩场景。压缩包共460个文件&#xff0…

2026/8/31 1:05:20

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/8/31 2:14:20

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/8/31 1:41:28

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…