自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 2.29 Unity基础

点击鼠标左键时,开启射线检测,记录下当前鼠标点击的物体,将其设为导航目的地。

2024-03-08 11:56:42 383

原创 Lua速成(7)

1.在表中查找,如果找到,返回该元素,找不到则继续2.判断该表是否有元表,如果没有元表,返回 nil,有元表则继续。3.判断元表有没有 __index 方法,如果 __index 方法为 nil,则返回 nil;如果 __index 方法是一个表,则重复 1、2、3;如果 __index 方法是一个函数,则返回该函数的返回值。

2024-02-28 16:00:05 1110

原创 Lua速成(6)

模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。由上可知,模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。

2024-02-27 16:36:15 1297

原创 Lua速成(5)table

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。2.操作1.contact 连接table.conc

2024-02-27 15:55:06 758

原创 Lua速成(4)迭代器

迭代器是一种对象,能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址。Lua中迭代器是一种支持指针类型的结构,可以遍历集合的每一个元素。

2024-02-27 15:28:14 1309

原创 Lua速成(3)

在 Lua 中,数组不是一种特定的数据类型,而是一种用来存储一组值的数据结构。实际上,Lua 中并没有专门的数组类型,而是使用一种被称为的数据结构来实现数组的功能。Lua 数组的索引键值可以使用整数表示,数组的大小不是固定的。在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始。

2024-02-27 14:25:04 385

原创 Lua速成(2)

end该参数是可选的指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字local。function是固定关键字。指定函数名称。函数参数,多个参数以逗号隔开,函数也可以不带参数。函数体,函数中需要执行的代码语句块。函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。可以将函数作为参数传递print("这是打印函数 - ##",param,"##")end-- 调用传递的函数参数end-- myprint 函数作为参数传递。

2024-02-23 19:01:15 2635

原创 Lua速成(1)

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

2024-02-23 11:13:50 1780 1

原创 【不用找素材】ECS 游戏Demo制作教程(3) 1.17

赋个值这边也能看到了再写个新脚本。

2024-01-17 19:02:05 600 5

原创 【不用找素材】ECS 游戏Demo制作教程(2) 1.16

baking是DOTS ECS工作流的一环,大概的意思就是将原先Editor下的GameObject数据,全部转换为Entity数据的过程。baking是一个不可逆的过程,原先的GameObject在运行时不复存在,都会变成Entity。baking只会在Editor环境下运行,而且只会对SubScene中包含的GameObject进行烘焙。

2024-01-17 15:15:01 962

原创 【不用找素材】ECS 游戏Demo制作教程(1) 1.15

版本:2022.2.0f1(版本太低的话会安装不了ECS插件)模板选择3D URP进来后移除URP(因为并不是真的需要,但也不是完全不需要)点击Add添加出现右边这个就是在安装中啦安装成功~~~↑推荐的编辑器布局需要新添加上来的窗口会在下边列出来把这些窗口打开,方便观察右键可以多加一个Inspector窗口项目设置窗口也打开勾选上,更快进入播放模式检查一下这几项。

2024-01-16 15:33:26 557

原创 1.12 ECS

简记为ECS,提供了默认情况下写出高性能的代码的方法提供了以并行的方式在多核CPU上运行游戏代码的方法一个math-aware,后端编译器(backend compiler),能产生高度优化的机器码(highly optimized machine code)有了这些系统,Unity可以为你的目标平台的特殊能力,产生高度优化的代码。ECS基本上就是Unity中一个新的写代码的方式。使用ECS,我们将从传统面向对象编程转为面向数据编程。

2024-01-12 18:30:26 946

原创 1.10 Unity中的数据存储 JSON

System.Json是一种类库,当我们在Unity中导入System.Json.dll文件后就可以使用System.Json.dll json命名空间。枚举:JsonType。https://www.json.cn/json2csharp.html 这个网站就可以实现JSON数据转实体的功能。由于Json对字符串的格式非常严格,输入一个字符错误都不行,所以我们可以使用相关的Json转换网站进行格式转换。先读取Json文件,使用IO命名空间下的File类的OpenText()函数进行读取。

2024-01-10 18:58:56 2322

原创 1.10 Unity中的数据存储 XML

【代码】1.10 Unity中的数据存储 XML。

2024-01-10 16:20:30 774

原创 1.5 Unity中的数据存储 PlayerPrefs

Unity中的三种数据存储:数据存储也称为数据持久化。

2024-01-05 19:02:12 1719 2

原创 1.5 Unity基础

Invoke() 方法是 Unity3D 的一种委托机制如: Invoke(“Test”, 3);它的意思是:3 秒之后调用 Test() 方法;使用 Invoke() 方法需要注意 以下3点:1 :它应该在 脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用;2:Invoke();不能接受含有参数的方法;3:在 Time.ScaleTime = 0;时, Invoke() 无效,因为它不会被调用。

2024-01-05 16:19:37 565 1

原创 1.4 Unity协程

对Integers()的第一次调用返回1。第二次调用返回2,并且yield return 1;不再执行。通过IEnumerator定义一个协程,通过yield return来定义返回值Debug.Log("协程被启动了!"+ str);

2024-01-04 18:57:00 1003 1

原创 1.3 Unity基础

Reset:点击编辑器面板的Reset按钮或者首次添加该组件时被调用Awake:用于在游戏开始之前初始化游戏变量或游戏状态,在脚本整个生命周期仅调用一次,当脚本设置为不可用时,运行时Awake仍会执行一次。Awake在所有对象被初始化之后调用,所以可以安全的和其他对象对话或者用GameObject.FindWithTag来搜索。每个游戏物体上的Awake随机调用。因此应该用Awake设置脚本间的引用,并用Start来传递信息。Awake总是在Start之前被调用,它不能用来执行协程。

2024-01-04 11:41:41 985 1

原创 1.2 C#基础

Dictionary表示键和值的集合。Dictionary<object, object>是一个泛型。他本身有集合的功能有时候可以把它看成数组。他的结构是这样的:Dictionary<[key], [value]>。他的特点是存入对象是需要与[key]值一一对应的存入该泛型,任何键都是唯一。通过某一个一定的[key]去找到对应的值。查找元素的时间复杂度为O(1)。

2024-01-02 16:41:30 895 1

原创 12.29 C#基础

C#支持foreach关键字,foreach在处理集合和数组相对于for存在以下几个优势:1、foreach语句简洁2、效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查)3、不用关心数组的起始索引是几(因为有很多开发者是从其他语言转到C#的,有些语言的起始索引可能是1或者是0)4、处理多维数组(不包括锯齿数组)更加的方便foreach只用一行代码就将所有元素循环了出来,而for循环则就需要很多行代码才可以.

2023-12-29 18:59:48 358 1

原创 12.28 C#基础

里氏替换原则(Liskov Substitution Principle LSP)⾯向对象设计的基本原则之⼀。一、什么是里氏替换原则?

2023-12-29 16:45:26 358 1

原创 12.26 C#基础

for循环可以通过索引依次进行遍历,foreach和Enumerator.MoveNext通过迭代的方式进行遍历,内存消耗上本质没有太大区别,但在Update中一般不推荐使用foreach,因为会遗留内存垃圾。委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方 法的列表的引用,可以便捷的使用委托对这个方法集合进行操作。这个返回的IEnumerator对象既不是集合类对象,也不是集合的元素类对象,它是一个独立的类对象。通过索引进行遍历,可以根据索引对所遍历集合进行修改。

2023-12-26 18:56:01 360 1

原创 12.26 C#基础

所以,对于引用类型来说,out 和 传引用 的区别跟对于值类型传 ref 和 out 的区别类似,具体适用场景也和值类型类似,所以就不多加阐述了。因为它当初设计的目的就是为了解决这个问题的。但是,如果把函数内部的 obj2 赋值了 null,只是修改了 obj2 的引用,而 obj1 依然是引用了原来的对象。传入值类型的引用后,你可以用它,也可以不用它,你也可以重新修改它的各个属性,而函数外也可以随之改变。首先,引用类型传的是引用,加了 ref 以后也是引用,暂时认为它们是一样的,并统称为:传引用。

2023-12-26 17:35:32 725 1

原创 12.22 C#基础

虚函数,是指被virtual关键字修饰的成员函数。在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数列表){函数体};,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。

2023-12-22 18:59:04 852

原创 12.21 C#基础(2)

总结:只用Action和Func就行了。

2023-12-21 18:34:16 336

原创 12.21 C#基础(1)

Lambda表达式是C#中一种函数式特性的编程,主要作用是简化代码和提高代码的可读性。在使用时可以通过其内联特性来实现编写更加简洁的代码。Lambda表达式是一种匿名函数,可以快速创建简单的委托或表达式树。在C#中,Lambda表达式通常用于替代匿名方法。Lambda表达式通常以箭头“=>”分隔左侧的输入和右侧的输出。

2023-12-21 16:19:29 863

原创 12.16 C#基础

Func是一种内置的泛型委托类型,可以与方法、匿名方法或lambda表达式一起使用。Func可以包含0~16个输入参数,并且必须具有一种返回类型。例如,此委托封装了一个具有两个参数并返回参数指定类型的值的方法Tresult。

2023-12-16 18:59:32 359 1

原创 12.13 C#基础

如果是处理字符串的话,用string中的方法每次都需要创建一个新的字符串对象并且分配新的内存地址,而 stringBuilder 是在原来的内存里对字符串进行修改,所以在字符串处理方面还是建议用stringBuilder这样比较节约内存。但是 string 类的方法和功能仍然还是比 stringBuilder 类要强。不过现在的编译器已经把String的 + 操作优化成 StringBuilder 了, 所以一般用String 就可以了。String是不可变的,所以天然线程同步。

2023-12-13 18:54:42 346 1

原创 12.12 C#基础

在内存中,变量会被分配在栈上进行操作。在堆上创建一个对象,会将对象的地址传给栈上的变量,反过来叫变量指向此对象,或者变量引用此对象,也就是栈上的变量指向了堆上地址为XXX的实例(对象)。构造函数格式为public+类名如果加上 static 会报错(静态构造函数不能有访问、型的对象,静态构造函数只执行一次;一个类只能有一个静态函数,如果有静态变量,系统也会自动生成静态函数。运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数;静态构造函数执行先于任何实例级别的构造函数;

2023-12-12 19:06:12 347

原创 12.8 C#基础

【代码】12.8 C#基础。

2023-12-08 19:01:32 375

原创 12.7 C#基础

声明了结构类型后,可以使用new运算符创建构造对象,也可以不使用new关键字。如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。

2023-12-07 19:05:24 330 1

原创 12.6 C#基础

引用类型:由类型的实际值引用(类似于指针)表示的数据类型,通俗点说就是在编程时需要new出来的变量类型都是引用型,引用类型是存放在内存的堆中;Add(1)装箱,Add(2)装箱,foreach(int i in list) 拆箱+拆箱,输出为string装箱+装箱,共4装2拆。Add无装拆,foreach(int i in list)无装拆,,输出为string装箱+装箱,共2装0拆。ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的,所以在声明时不需要指定它的长度。

2023-12-06 19:34:26 345 1

原创 12.5 C#基础

抽象类:不能包含任何实现逻辑,但可以存储变量值。任何从抽象类派生出的子类都必须完全实现所有abstract抽象方法。当想使用类继承,而不需要写出基类默认实现的情况下,可以用抽象类~抽象类:保持面向对象编程的单继承结构,同时将类的实现与其蓝图分离。值类型也隐式继承自System.Object。在子类中override重写抽象方法。接口:允许在不相关的对象之间扩散。

2023-12-05 19:04:17 364 1

原创 12.4 C#基础

5.来源:值→继承自 System.ValueType 引用→继承自 System.Object。1.存储:值→栈→存储的是直接的值 引用→堆→内存单元中存放的是堆中存放的地址。方法:将数据和行为相结合,通过行为约束代码修改数据的程度,增强数据的安全性。特性:传递性→传递机制,单根性→一个类只能继承一个类,不能有多个父类。3.含义:值→实际数据 引用→指向存储在内存堆中的数据的指针和引用。4.释放:值→栈→自动释放 引用→堆→由 GC 来自动释放。方法:把子类的共同的特性提取出来设置为父类。

2023-12-04 21:50:57 371

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除