Unity C#结构体的总结/使用详解

简介: Unity C#结构体的总结/使用详解 本文提供全流程,中文翻译。 助力快速理解 C# 结构体的具体用法 为新手节省宝贵的时间,避免采坑! 在 Unity 中,鉴于这种情况,我们可以使用结构体,然后将其序列化,显示在 Inspector 面板上 并用 LIst 列表/或者数组完成批量的可视...

Unity C#结构体的总结/使用详解


本文提供全图文流程,中文翻译。

Chinar 坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)

Chinar —— 心分享、心创新!

助力快速理解 C# 结构体的具体用法

给新手节省宝贵的时间,避免采坑!


Chinar 教程效果:
Struct_2

全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

Struct —— 结构体

C# 中,结构体是值类型数据结构。

它使得一个单一变量可以存储各种数据类型的相关数据, struct 关键字用于创建结构体。

结构体是用来代表一个记,其中存储我们自定义的各种类型数据。

结构体的具体特性,这里就不多说了,菜鸟教程/百度大神都有更为详细的解释




我只讲写实在的,便于新手理解、应用

很多时候,我们使用它,是为了整理数据结构

使得我们的数据逻辑,更加简单、清晰、便于我们理解与操作
举个例子
比如:我们要管理一个游戏中所有的怪物信息数据

我们就需要记录每种怪物的数据,其中可能有怪物类型、血量、出生位置、等等信息...

如果管理停车场中的所有汽车,我们就需要记录每种怪物的数据,其中可能有车牌号、型号、价格、车主等等信息

此时,我们如果通过手写变量去 大量的声明对象,以及对象的其他诸如此类的属性,工作量将非常大




例如以下这样:甚至,更多的怪物种类,写着、写着就懵逼了

后期,要修改某个怪物的对应属性,查找起来非常麻烦

就算我们使用构造函数,虽然简化了代码,但如果怪物种类过多,后期维护起来,也是个麻烦事

using UnityEngine;


/// <summary>
/// 怪物类
/// </summary>
public class Enemy
{
    public string  Name;
    public int     Id;
    public Vector3 Pos;
    public Color   Color;
}

/// <summary>
/// 结构体测试类
/// </summary>
public class ChinarStruct : MonoBehaviour
{
    /// <summary>
    /// 初始化函数
    /// </summary>
    void Start()
    {
        Enemy enemy1 = new Enemy
        {
            Name  = "小兵",
            Id    = 1,
            Pos   = new Vector3(0, 0, 0),
            Color = new Color(0, 1, 1)
        };

        Enemy enemy2 = new Enemy
        {
            Name  = "中兵",
            Id    = 2,
            Pos   = new Vector3(1, 2, 3),
            Color = new Color(1, 0, 1)
        };

        Enemy enemy3 = new Enemy
        {
            Name  = "大兵",
            Id    = 3,
            Pos   = new Vector3(4, 5, 6),
            Color = new Color(1, 1, 1)
        };

        Enemy enemy4 = new Enemy
        {
            Name  = "Boss",
            Id    = 4,
            Pos   = new Vector3(100, 200, 300),
            Color = new Color(1, 1, 0)
        };
    }
}

Unity 中,鉴于这种情况,我们可以使用结构体,然后将其序列化,显示在 Inspector 面板上

并用 LIst列表/或者数组完成批量的可视化设定每一种怪物的参数

这样,数据逻辑就会非常清晰,并且在我们使用怪物数据时,也会非常方便,而不需一个个的去手动写入数据


2

Disposal Data —— 整理数据


那么我们这时候,使用结构体来规整我们的数据

让怪物的各种参数显示在 Inspector 层次面板上

那么后期,我们需要对某一个怪物的属性进行变更时,只需要在面板上更改到我们要的值即可

全程可视化操作,要比 1 中找字符串、更改代码要简单/方便许多
举个例子
1. 我们创建一个怪物的结构体,你可以理解为一个怪物类型

其中包含了我们需要怪物拥有的所有属性(自己随意定义)

[Serializable]对结构体进行序列化,才能显示在 Inspector 层次面板上

/// <summary>
/// 怪物结构体
/// </summary>
[Serializable]//序列化,才能显示在层次面板上
public struct EnemyStruct
{
    public string  Name;  //名称
    public string  Id;    //id
    public Vector3 Pos;   //生成位置
    public Color   Color; //颜色
    public int     Count; //数量
}

2. 声明一个结构体数组/ LIst 列表

用来批量创建,我们所需要的 Enemy 怪物

[Serializable]对结构体进行序列化,才能显示在 Inspector 层次面板上

using System;
using UnityEngine;


/// <summary>
/// 结构体测试类
/// </summary>
public class ChinarStruct : MonoBehaviour
{
    /// <summary>
    /// 怪物结构体
    /// </summary>
    [Serializable] //序列化,才能显示在层次面板上
    public struct EnemyStruct
    {
        public string  Name;  //名称
        public string  Id;    //id
        public Vector3 Pos;   //生成位置
        public Color   Color; //颜色
        public int     Count; //数量
    }

    public EnemyStruct[] Enemys; //怪物数组


    /// <summary>
    /// 初始化函数
    /// </summary>
    void Start()
    {
    }
}

3

Add Data in Inspector —— 在面板上添加怪物数据

我们回到Unity界面,等待脚本编译后,看下 Inspector 层次面板上

会发现Struct1

我们需要设置多少种怪物,直接设置就行了

对应的怪物参数,也变的可视化操作了,非常方便

设置完成后,我们即可通过脚本,对所有的怪物数据进行操作

需要的时候,从数组里取出对应数据即可!
举个例子
Struct_2Struct3

设置完后,我们通过Start函数,运行输出下看看验证是否正确

    /// <summary>
    /// 初始化函数
    /// </summary>
    void Start()
    {
        foreach (var e in Enemys)
        {
            print("怪物名称:" + e.Name);
        }
    }

输出结果:
Struct4

那么之后的维护,与使用就非常方便了

至此:结构体的基本使用方式介绍完


4

Extend —— 扩展

其实通过这种思路,我们创建 敌人数据类,声明属性字段

我们同样可是将脚本类给序列化,显示在 Inspector 面板上进行同样操作

所以说程序的实现方式多种多样, C# 为我们提供的也不仅仅是一种开发方式

只有不断的学习运用更为简单,逻辑更为清晰的方式实现我们所需的功能

才是能长真本事的

举个例子

using System;
using UnityEngine;


[Serializable]
public class Enemy
{
    public string  Name;
    public string  Id;
    public Vector3 Pos;
    public Color   Color;
}
/// <summary>
/// 结构体测试类
/// </summary>
public class ChinarStruct : MonoBehaviour
{
    public Enemy[] Enemys; //怪物数组
}

至此:结构体的基本使用方式介绍完


其他教程

May Be —— 搞开发,总有一天要做的事!


1 —— 云服务器超全购买流程 (新手必备!)


2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)


3—— Windows 服务器配置、运行、建站一条龙 !


4 —— Linux 服务器配置、运行、建站一条龙 !



70
$ $
技术交流群:806091680 ! Chinar 欢迎你的加入

END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

相关文章
|
28天前
|
存储 C#
C#数据类型之结构体介绍
C#数据类型之结构体介绍
|
29天前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
4月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
35 0
|
4月前
|
存储 C# 图形学
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
46 1
|
4月前
|
搜索推荐 算法 C#
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
46 1
|
4月前
|
程序员 C# 图形学
【Unity 3D】C#中条件语句if else switch的讲解
【Unity 3D】C#中条件语句if else switch的讲解
49 1
|
3月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
71 2
|
4月前
|
JSON C# 图形学
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
48 0
|
4月前
|
网络协议 Unix Linux
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
41 0
|
4月前
|
数据可视化 C# 图形学
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
62 0