Unity C# 脚本学习笔记:变量、数据类型与类型转换

发布时间:2026/10/19 9:47:17

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/10/16 14:04:06

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

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

2026/10/19 3:10:44

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

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

2026/10/19 14:04:20

SAP-PP替代物料五类工程模式与配置避坑指南

简介:本资源是一份面向SAP PP模块实施顾问、生产计划员及系统运维人员的实操型技术手册,聚焦SAP中替代物料的核心配置与业务场景落地。针对生产过程中因物料短缺需动态切换(如A用完自动切B、A/B按30%/70%比例共用)等典型问题&…

2026/10/19 14:04:20

开源RAG系统搭建与调优实战:从选型到生产落地

1. 为什么我最终选择了开源RAG方案——一次从商业API到自建系统的迁移实录 先交代一下背景。我之前在某公司负责内部知识库的智能化改造,核心需求其实非常简单:让业务同事可以直接用自然语言提问,系统从几十万份产品文档、售后工单和FAQ里找出…

2026/10/19 14:04:20

自己搭建开源代码审查方案:从选型到落地的完整实践

1. 为什么我会自己搭一套开源代码审查方案,而不是直接买商业工具先交代一下背景。团队从去年开始把代码审查从“随缘看两眼”往“强制门禁”的方向推,过程并不顺利。GitLab上虽然开了MR模板,PR描述里也加了自检清单,但实际review质…

2026/10/19 14:04:20

企业级RAG+Agent编排:从多表查询到多轮对话的落地实践

业务同学在群里问了一个看起来很普通的问题:"上个月华东区的退货率为什么比华北区高?帮我查查原因,顺便翻一下上月退货处理报告。"这个问题的麻烦在于,它同时牵扯了三件事:先要在订单表和退货表之间做关联计…

2026/10/19 13:59:18

open-code-review:基于CLI与LLM Agent的自动化代码评审新范式

1. 什么是 open-code-review:一个被严重低估的工程实践新范式“open-code-review”这个词最近在开发者社区里频繁出现,但它不是某个具体工具的名字,也不是某家公司的私有产品,而是一种正在快速成型的、以开放性、自动化和可追溯性…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/19 0:04:56

悟空开源无代码平台实战:从实体建模到应用设计避坑指南

简介:基于悟空开源无代码平台的多种应用设计源码,面向希望在不编写代码的情况下快速搭建CRM、HRM、财务系统、ERP、SRM等业务应用的企业与技术人员,通过拖放式界面和内置模板即可完成应用定制与部署。压缩包共697个文件,约10.74MB…

2026/10/19 0:04:56

基于.NET9的多租户权限系统:数据权限与动态API落地实践

简介:这份资源是一套面向 .NET 与 Vue 全栈开发者的中台权限管理系统,后端基于 .Net9,前端采用 Vue3 Element Plus,并配套 uniapp uviewui 移动端方案,实现前后端分离。系统覆盖多租户隔离、数据权限、动态 Api、任务…

2026/10/19 0:04:56

场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

简介:面向毕业设计场景的场地预约小程序完整项目,基于微信小程序SSMMySql技术栈开发,适合计算机相关专业学生作为选题参考、功能扩展或二次开发起点。系统实现场地类型管理、场地管理、预约管理、取消申请与押金退回等功能,分为管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑