unity中结构体的使用-02

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 结构体(Struct)是值类型数据结构,在栈上分配内存,可以包含字段,属性,方法,构造函数。结构体可以实现接口,但是不能继承。在Dots里有大量依靠Struct实现接口来定义Entities数据类型和实现逻辑。

前言:每日记录自己学习unity的心得和体会,小弟才疏学浅,如有错误的地方,欢迎大佬们指正,感谢~

图片.png

1.结构体方法

1)get方法

可以直接在结构体变量后使用,下面以求模长为例

  DoubleVec doubleVec1;

  void Start()

   {

       doubleVec1 = new DoubleVec(1, 1, 1);

       //这里直接可以点出方法

       double mag= doubleVec1.Magnitude;

       Debug.Log("mag=" + mag);

   }

创建的方法

public struct DoubleVec

{

   public double x;

   public double y;

   public double z;


   //构造函数

   public DoubleVec(double x, double y, double z)

   {

       this.x = x;

       this.y = y;

       this.z = z;

   }

  //必须用get方法给方法赋值

   public double Magnitude {

       get {return  magnitude(); }

   }

   //求模长的方法

    double magnitude()

   {

       double a = getLength(x, y);

       double b = getLength(a, z);

       return b;

       double getLength(double a, double b)

       {

           return Math.Sqrt(a * a + b * b);

       }

   }

}

(2)结构体传参方法

可以在结构类型后面点出方法,传入参数进行逻辑处理,同样以求模长为例

 DoubleVec doubleVec1;

  void Start()

   {

       doubleVec1 = new DoubleVec(1, 1, 1);

       //这里是同结构体类型点出方法,参数为结构体变量

       double mag= DoubleVec.MagnitudeVec(doubleVec1);

       Debug.Log("mag=" + mag);

   }

创建方法

public struct DoubleVec

{

   public double x;

   public double y;

   public double z;


   //构造函数

   public DoubleVec(double x, double y, double z)

   {

       this.x = x;

       this.y = y;

       this.z = z;

   }

  //这里要用静态方法,参数与结构体本身的字段没有关系

   public static double MagnitudeVec(DoubleVec vec)

   {

       return magnitude(vec);

   }

   //运算方法也要静态

   static double magnitude(DoubleVec vec)

   {

       double a = getLength(vec.x, vec.y);

       double b = getLength(a, vec.z);

       return b;

       double getLength(double a, double b)

       {

           return Math.Sqrt(a * a + b * b);

       }

   }

}

这种方法是很独立的,与结构体本身没有关联,只能算逻辑上的分类

3)逻辑运算

这里的逻辑运算包括:加、减、乘、除、大于、小于、等于、不等于等。下面以实现加法为例。

   DoubleVec doubleVec1;

   DoubleVec doubleVec2;

   void Start()

   {

       doubleVec1 = new DoubleVec(1, 1, 1);

       doubleVec2 = new DoubleVec(2, 2, 2);

       DoubleVec doubleVec3 = doubleVec1 + doubleVec2;

   }

创建方法

public struct DoubleVec

{

   public double x;

   public double y;

   public double z;


   //构造函数

   public DoubleVec(double x, double y, double z)

   {

       this.x = x;

       this.y = y;

       this.z = z;

   }

   //使用operator运算符重载方法

   //参数中必须有一个为DoubleVec

   public static DoubleVec operator +(DoubleVec a, DoubleVec b)

   {

       return new DoubleVec(a.x + b.x, a.y + b.y, a.z + b.z);

   }

}




相关文章
|
8月前
|
图形学
unity中结构体的使用-03
结构体(Struct)是值类型数据结构,在栈上分配内存,可以包含字段,属性,方法,构造函数。结构体可以实现接口,但是不能继承。在Dots里有大量依靠Struct实现接口来定义Entities数据类型和实现逻辑。
|
8月前
|
图形学
unity中结构体的使用-01
结构体(Struct)是值类型数据结构,在栈上分配内存,可以包含字段,属性,方法,构造函数。结构体可以实现接口,但是不能继承。在Dots里有大量依靠Struct实现接口来定义Entities数据类型和实现逻辑。
|
数据可视化 C# 图形学
Unity C#结构体的总结/使用详解
Unity C#结构体的总结/使用详解 本文提供全流程,中文翻译。 助力快速理解 C# 结构体的具体用法 为新手节省宝贵的时间,避免采坑! 在 Unity 中,鉴于这种情况,我们可以使用结构体,然后将其序列化,显示在 Inspector 面板上 并用 LIst 列表/或者数组完成批量的可视...
3968 0
|
5月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
51 0
|
5月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
52 0
|
5月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
41 0
|
5月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
41 0
|
5月前
|
vr&ar 图形学
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
56 0
|
5月前
|
vr&ar 开发工具 图形学
【Unity 3D】使用EasyAR实现单图识别的AR增强现实功能(附实现步骤)
【Unity 3D】使用EasyAR实现单图识别的AR增强现实功能(附实现步骤)
90 0
|
5月前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
185 0