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

40 篇文章 5 订阅

如博文无法正常显示,请访问原创文章: https://blog.csdn.net/ChinarCSDN/article/details/82504171

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


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

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

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


Chinar —— 心分享、心创新!

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

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


Chinar 教程效果:
这里写图片描述



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


1

Struct —— 结构体

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

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

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

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


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

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

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

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

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

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


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

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

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

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 中找字符串、更改代码要简单/方便许多
举个栗子黑白88
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 层次面板上

会发现这里写图片描述

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

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

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

需要的时候,从数组里取出对应数据即可!
举个栗子黑白88
这里写图片描述
这里写图片描述
设置完后,我们通过Start函数,运行输出下看看验证是否正确

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

输出结果:
这里写图片描述

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

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


4

Extend —— 扩展

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

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

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

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

才是能长真本事的

举个栗子黑白88

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 —— 搞开发,总有一天要做的事!


拥有自己的服务器,无需再找攻略!

Chinar 提供一站式教程,闭眼式创建!

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


先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


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

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

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

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




<script type="math/tex" id="MathJax-Element-2"> </script>
技术交流群:806091680 ! Chinar 欢迎你的加入


END

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

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

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

  • 14
    点赞
  • 33
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页
评论 1

打赏作者

Chinarcsdn

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值