Unity游戏制作中的C#基础(4)数组声明和使用
一、数组的声明
在 C# 中,声明数组有多种方式,每种方式都有其适用的场景,下面为你逐一详细介绍:
1. 直接初始化声明
这种方式直观且便捷,在声明数组的同时就为其赋初值,让数组从诞生之初就拥有了具体的数据。格式为:数据类型[] 数组名 = {数组值};
示例代码如下:
int[] numbers = { 1, 2, 3, 4, 5 };
此代码声明了一个名为 numbers
的整型数组,并初始化为包含 1 到 5 的五个整数。这种声明方式适用于你在编写代码时就已经明确知道数组要包含哪些元素的情况。比如,在游戏中你要定义一个固定的关卡顺序列表,就可以使用这种方式来声明数组。
2. 声明空数组
有时候,你可能暂时还不知道数组中要存放哪些元素,但又需要一个数组对象来后续填充数据,这时就可以声明一个空数组。格式为:数据类型[] 数组名 = {};
示例:
int[] emptyArray = {};
这里声明了一个名为 emptyArray
的空整型数组。虽然它目前没有包含任何元素,但它是一个合法的数组对象,可以在后续的代码中通过动态添加元素的方式来填充数据。例如,在游戏中根据玩家的不同选择来动态生成一组道具列表,就可以先声明一个空数组,然后根据选择结果向数组中添加元素。
3. 指定数组长度声明
当你知道数组需要容纳的元素数量,但暂时还不清楚每个元素的具体值时,可以通过 new
关键字来声明数组并指定其长度。格式为:数据类型[] 数组名 = new 数据类型[数组长度];
示例:
int[] lengthArray = new int[10];
这行代码声明了一个名为 lengthArray
的整型数组,其长度为 10。不过数组中的元素初始值都为该数据类型的默认值,对于 int
类型,默认值是 0。这种声明方式在需要预先分配一定内存空间来存储数据的场景中非常有用。比如,在游戏中要统计玩家在一定时间内的得分情况,你可以先声明一个固定长度的数组来存储每一次得分,然后在游戏过程中依次将得分填入数组。
4. 声明未初始化数组
仅声明数组变量,不进行初始化。这种方式只是在内存中为数组引用分配了空间,但该引用并没有指向任何实际的数组对象。
示例:
int[] str1;
需要注意的是,此时 str1
只是一个未被初始化的引用,它并不指向任何实际的数组对象,所以不能直接使用。如果尝试访问或操作 str1
,会引发编译错误。而像下面这样声明的空数组:
int[] str2 = {};
str2
是一个实际存在的空数组对象,可以正常使用。虽然它没有元素,但它已经在内存中分配了相应的空间,可以进行后续的操作。这种声明方式适用于你在后续代码中才会根据具体情况来创建数组对象的场景。
5. 指定长度并初始化声明
结合指定长度和初始化操作,这种方式既明确了数组的长度,又为数组元素赋予了初始值。格式为:数据类型[] 数组名 = new 数据类型[数组长度] { 元素值 };
示例:
int[] specificArray = new int[5] { 10, 20, 30, 40, 50 };
此代码声明了一个长度为 5 的整型数组 specificArray
,并为其元素赋了初始值。这种声明方式在你既知道数组长度又明确元素具体值的情况下非常实用。比如,在游戏中要定义一个固定的奖励数值列表,就可以使用这种方式来声明数组。
二、数组元素的访问
在 C# 中,数组元素通过索引来访问,索引从 0 开始。也就是说,数组的第一个元素索引为 0,第二个元素索引为 1,依此类推。
示例代码:
int[] numbers = { 1, 2, 3, 4, 5 };
int firstNumber = numbers[0]; // 访问第一个元素,值为 1
int thirdNumber = numbers[2]; // 访问第三个元素,值为 3
若尝试访问超出数组索引范围的元素,会引发 IndexOutOfRangeException
异常,这就好比你去一个只有 5 个房间的酒店,却要找第 6 个房间,显然是不存在的。所以在访问数组元素时要确保索引在合法范围内。为了避免这种异常的发生,在访问数组元素之前,可以先检查索引是否在数组的有效范围内。例如:
int[] numbers = { 1, 2, 3, 4, 5 };
int index = 2;
if (index >= 0 && index < numbers.Length)
{int element = numbers[index];// 处理元素
}
else
{// 处理索引越界的情况Console.WriteLine("索引越界!");
}
三、数组的常见操作
1. 遍历数组
遍历数组是指依次访问数组中的每个元素,这在处理数组数据时非常常见。可以使用 for
循环或 foreach
循环来实现数组的遍历。
使用 for
循环遍历数组
int[] numbers = { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Length; i++)
{Console.WriteLine(numbers[i]);
}
使用 foreach
循环遍历数组
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{Console.WriteLine(number);
}
2. 修改数组元素
可以通过索引来修改数组中的元素值。
示例:
int[] numbers = { 1, 2, 3, 4, 5 };
numbers[2] = 10; // 将第三个元素的值修改为 10
四、结语
希望通过本文的介绍,你能对 C# 数组有更深入的理解,并在 Unity 游戏开发中熟练运用数组来解决各种问题。后续我们还会继续探讨 C# 中更多的数据结构和编程技巧,帮助你进一步提升开发能力,让你在 Unity 游戏开发的道路上越走越远,创造出更加精彩的游戏作品。
相关文章:
Unity游戏制作中的C#基础(4)数组声明和使用
一、数组的声明 在 C# 中,声明数组有多种方式,每种方式都有其适用的场景,下面为你逐一详细介绍: 1. 直接初始化声明 这种方式直观且便捷,在声明数组的同时就为其赋初值,让数组从诞生之初就拥有了具体的数据…...

tailwindcss学习03
01 入门 02 vue中接入 03 工具类优先 准备 vue.svg <svg viewBox"0 0 40 40" xmlns"http://www.w3.org/2000/svg"> <defs> <linearGradient x1"50%" y1"0%" x2"50%" y2"100%" id"a"&…...

QML Component 与 Loader 结合动态加载组件
在实际项目中,有时候我们写好一个组件,但不是立即加载出来,而是触发某些条件后才动态的加载显示出来,当处理完某些操作后,再次将其关闭掉; 这样的需求,可以使用 Component 包裹着组件ÿ…...
Visual studio 2022 将打开文件的方式由单击改为双击
1. 打开vs2022,选择Tools -> Options打开Options设置页面 2. 在左侧依次展开Environment, 选择Tabs and Windows 3. 在右侧面板往下拖拽滚动条,找到Preview Tab section, unchecked "Preview selected files in Solution Explorer (Altclick t…...

网络工程师 (49)UDP协议
前言 UDP协议,即用户数据报协议(User Datagram Protocol),是一种无连接的、不可靠的、面向报文的传输层通信协议。 一、基本特点 无连接性:UDP在发送数据之前不需要与目标设备建立连接,也无需在数据发送结束…...

了解大数据
一、大数据的特点: 1.大量 2.高速 3.多样 结构化数据和非结构化数据 4.低价值密度 二、大数据的应用场景:视频推荐、电商推荐等 三、大数据的技术发展脉络 阶段1:单机时代 阶段2:大数据时代-分布式处理 阶段3:实…...
命令模式
1. 命令模式简介 命令模式(Command Pattern)是一种行为型设计模式,它将一个请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化、对请求排队或记录请求日志,以及支持可撤销的操作。命令模式的核心思想是将操作和操作的执行者解耦,使得操作可以独立于执行者进…...

解放大脑!用DeepSeek自动生成PPT!
DeepSeek应用(PPT篇) DeepSeek作为当前最好的AI大模型之一,其强大的文本生成能力被广泛的应用于各个领域,本文我们来聊聊用DeepSeek来自动生成PPT。 一、DeepSeek & PPT DeepSeek本身没有直接生成PPT的能力,换个…...
GUI编程(window系统→Linux系统)
最近有个项目需要将windows系统的程序往Linux系统上面移植,由于之前程序没有考虑过多平台兼容的问题,导致部分功能不可用以下是对近期遇到的问题的总结,以及相应的解决方案和经验分享。 1. Python 模块安装与管理 在 Linux 系统中࿰…...

互推机制在开源AI智能名片2+1链动模式S2B2C商城小程序源码推广中的应用探索
摘要: 在数字化营销时代,开源AI智能名片21链动模式S2B2C商城小程序源码作为一种创新的技术解决方案,正逐步成为企业数字化转型的重要工具。然而,面对激烈的市场竞争,如何高效推广这一前沿技术产品,成为开发…...

Pytorch实现之特征损失与残差结构稳定GAN训练,并训练自己的数据集
简介 简介:生成器和鉴别器分别采用了4个新颖设计的残差结构实现,同时在损失中结合了鉴别器层的特征损失来提高模型性能。 论文题目:Image Generation by Residual Block Based Generative Adversarial Networks(基于残留块的生成对抗网络产生图像) 会议:2022 IEEE Int…...
ES6相关操作(2)
一.Promise Promise是ES6引入的异步编程工具。 语法上Promise是一个构造函数,用于封装异步操作并可以获取操作成功或失败的结果 Promise构造函数:Promise(excutor){} Promise的常用函数:then,catch 实例化Promise对象(创建Promise工具) let data"请求数据"//该数据为…...

自动化办公|xlwings生成图表
在日常的数据分析和报告生成中,Excel图表是一个非常重要的工具。它能够帮助我们直观地展示数据,发现数据中的规律和趋势。然而,手动创建和调整图表往往耗时且容易出错。幸运的是,借助Python的xlwings库,我们可以自动化…...

大模型知识蒸馏技术(5)——在线蒸馏
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 在线蒸馏概述 在线蒸馏是一种知识蒸馏方式,其核心特点是教师模型和学生模型的参数在训练过程中同时更新,整个蒸馏框架是端到端训练的。这种方式允许教师模型和学生模型相互影响、共同学习,能…...
Java 条件语句
Java 条件语句概述 条件语句通过判断给定条件的真假来控制程序的执行。本小节将详细介绍 Java 中各类条件语句。 1. if 语句 1.1 语法 用于根据给定条件决定是否执行一段代码。if 块仅在关联的布尔表达式为 true 时执行。 if (条件) {// 当条件成立时执行此处代码 }大括号…...

用JMeter给要登录的操作做压力测试
压力测试的http请求路径如下图 应当添加http Header Manager,设置登录凭证...
算法的数学基础
组合数 从n个不同元素中取出m(m≤n)个不同元素的所有组合的个数:C(n, m) n! / [m!(n - m)!]n个物品所有可能的组合数(不考虑组合的大小m):Σ C(n, m) C(n, 0) C(n, 1) C(n, 2) … C(n, n) 2 n 2^n 2…...

flowable适配达梦数据库
文章目录 适配相关问题无法从数据库产品名称“DM DBMS”中推断数据库类型分析解决 构建ibatis SqlSessionFactory时出错:inStream参数为null分析解决 liquibase相关问题问题一:不支持的数据库 Error executing SQL call current_schema: 无法解析的成员访…...

VScode C语言学习开发环境;运行提示“#Include错误,无法打开源文件stdio.h”
C/C环境配置 参考: VS Code 配置 C/C 编程运行环境(保姆级教程)_vscode配置c环境-CSDN博客 基本步骤 - 安装MinGW-W64,其包含 GCC 编译器:bin目录添加到环境变量;CMD 中输入gcc --version或where gcc验证…...

DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
对于个人开发者或尝鲜者而言,本地想要部署 DeepSeek 有很多种方案,但是一旦涉及到企业级部署,则步骤将会繁琐很多。 比如我们的第一步就需要先根据实际业务场景评估出我们到底需要部署什么规格的模型,以及我们所要部署的模型&…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...