C#
文章平均质量分 68
Reason and calmness
Reason and calmness
展开
-
lua系统学习15-捕获和异常
Package.loadlib参数:动态库的完整路径和一个函数名称。loadlib函数加载指定的库,并没有调用库中的任何函数,它会将一个c函数作为Lua函数返回。在Unity中使用Lua 这个方法很常用通常使用require来加载c程序块 ,这个函数会搜索指定的库,然后用loadlib来加载库,并返回初始化函数。这个初始化函数应将库中提供的函数注册到lua中,就好像一段lua代码定义了其他的函数一样。处理错误if not n then error(“message”) end当n为假的时候 抛原创 2021-11-25 17:57:26 · 1160 阅读 · 0 评论 -
lua系统学习14-动态加载与编译
编译loadstringloadingstring与loadfile类似 不同之处在于它是从一个字符串中读取代码,而非从文件读取。f=loadstring(“i=i+1”)—此时loadstring返回的是一个函数。这就是解释性语言的好处,直接在编译之后动态的去加载代码。假设我们使用loadfile读取文件,文件若是为空调用的时候将会导致异常报错。我们可以使用assert 更清楚地显示错误消息。当发生错误的时候 assert用来引发一个错误。f=assert(loadstring(“io_st原创 2021-11-24 18:08:28 · 456 阅读 · 0 评论 -
lua系统学习13-自定义创建一个迭代器
使用Closure特性自己创建迭代器function IteratorDIY(t1) function iteratorTableValue(t) local i=0 return function () i=i+1; return t[i] end end for i in iteratorTableValue(t1) do print(i) endendIteratorDIY({0,1,2,3,4,5,6,'\\0'});原创 2021-11-24 17:16:06 · 580 阅读 · 0 评论 -
lua系统学习12-深入函数
Closure 闭合函数table的排序方法就是用到了这种函数,匿名函数。示例names={"Miracle","Jack","xiaosha"}grades={Miracle=6,Jack=2,xiaosha=3}for i,v in ipairs(names) do print(i,v)endt=table.sort(names,function(name1,name2) return grades[name1]<grades[name2] end)fo.原创 2021-11-23 10:50:05 · 404 阅读 · 0 评论 -
Unity性能优化——GameObject生成IO消耗问题分析
发现如果一个预制体内部里放有其他预制体2,会进行io读取的开销。这个预制件2在预制件1中出现几次它就会进行几次的io开销。所以尽量不要在预制体里直接塞另外预制体。尽量动态生成测试:为了确保测试结果单一性,避免偶然。测试物体生成基数都以208,都通过resources读取prefab然后再生成,并且每次测试重新运行项目● 先测试一个预制体内部有很多其他预制体的情况● 测试直接instantiate动态生成预制件。测试结果:测试1- IO 6.30ms Instantiate 1.52.原创 2021-11-19 17:57:21 · 4590 阅读 · 0 评论 -
lua系统学习11-函数
return函数与块在lua中如果在一个块内return之后出现了语句,编译器就认为他是错误代码。如:错误示例:function returnFunc() return 1 print("2")endprint(returnFunc())C:\Users\Admin\Downloads\luaforwindows-5.1.5-52\files\lua5.1.exe: C:/File/Lua/Return.lua:8: 'end' expected (to close 'fun原创 2021-11-17 19:27:27 · 788 阅读 · 0 评论 -
lua系统学习10-迭代器
迭代器表迭代器数组迭代器io文件行迭代器字符串迭代器1.表迭代器function iteratorpairsStruct(t) ---用来读取table表的 for i, v in pairs(t) do print("i是什么:" .. i) print("v是什么:" .. v) endendlocal t={["x"]="x2",["y"]="y2",["z"]="z2",2}iteratorpairsStruct(t).原创 2021-11-13 17:57:47 · 567 阅读 · 0 评论 -
lua系统学习09-控制结构
控制结构IF结构function nestIF() booleanCondition=1; if booleanCondition==1 then print("条件为True") else print("条件为false") endendIF~ElseIF嵌套---nest Ifelse age=tonumber(io.read()) if age>60 then print("老年人")原创 2021-11-13 16:56:01 · 412 阅读 · 0 评论 -
lua系统学习08-Chunk与局部变量
关于上篇多重赋值,还发现一个特性也算是函数的一个特性函数的返回值支持返回多个。可以使用多重赋值被多个变量接收。如:function func() return 1,2enda,b=func()print(a)print(b)debug12这样就不需要手动创建一个集合去返回了。非常便捷就可以为指定变量赋予指定的值局部在lua中也有语句块Chunk的概念,有块的概念就有局部的概念,在lua局部变量使用local语句来创建。测试在Chunk脚本中加载multiplyA原创 2021-11-12 23:40:02 · 541 阅读 · 0 评论 -
lua系统学习07-多重赋值
语句赋值Lua支持多重赋值一般人理解多重赋值都按照这种写法。function multAssignment() a,b=1 print(a) print(b)endmultAssignment()但是输出的结果表明在lua中这种写法是错误的。1nil我不知道为什么我第一印象里想到多重赋值是这样的,可能貌似是py的写法,好久没写py了在c#里也可以这样写,但是我记得C#中这样写它只会给最后一个变量赋值。具体是不是这样大家去试试。在lua中多重赋值正确写法f原创 2021-11-12 19:30:00 · 632 阅读 · 0 评论 -
lua系统学习06-Table构造函数
最简单的构造器是“{}”,用来创建一个空表。可以直接初始化数组:可以使用表构造一个链表:list = nilfor line in io.lines() do if line=="0" or line=="false" then break; end list = {nextVar = list, valueVar = line}endl = listwhile l do print(l.valueVar) l = l.nextVare原创 2021-11-12 18:22:19 · 645 阅读 · 0 评论 -
lua系统学习05-表达式
函数:函数可以存储在变量中,可以作为函数的参数 可以作为返回值。可以重新定义函数增加新的功能 ///这句话暂时没理解 是指动态时期重新定义?还可以避免运行不可靠代码创建安全运行环境而隐藏函数lua的所有标准库都是c实现的。所以可以调用lua或c实现的函数。UserData自定义类型userdata可以将c数据置入在lua变量中。userdata 用来描述应用程序或者使用 C 实现的库创建的新类型。例如:用标准 I/O 库来描述文件。表达式常量 、变量、点操作符、一元运算符、二元运算符、原创 2021-11-11 16:54:22 · 616 阅读 · 0 评论 -
lua系统学习04-table表
Table可以通过整数、字符串以及其他类型的值 除了nil 来作为索引值。table类似与c#中的list 可以动态地添加任意数量的元素到一个table中.table 可以用来表示数组 符号表、集合、记录、队列等数据结构哦。也可以表示模块 包、对象如io.read io为模块 read是函数。在lua中来看的话,read是作为io的key 来索引io的。io为table read是key。------ Generated by EmmyLua(https://github.com/EmmyL.原创 2021-11-10 23:43:18 · 375 阅读 · 0 评论 -
Unity的TransformDirection、Vector3、Point是有什么作用?不同
transform.direction和transformpoint还有transform.vector3 有什么区别?经过测试后,个人觉得没有区别,如若有区别还请网友指点。通过官方手册可以看到 具体描述 transform.direction 它将一个局部坐标转换成一个世界坐标。它只受比例影响。具体解释一下,通这个方法做相机跟随。代码如下首先我们在开始就计算了相机到人物间的向量 叫......原创 2020-02-10 23:43:15 · 2599 阅读 · 0 评论 -
关于overrider虚方法重写——虚方法怎么使用的概念理解
关于虚方法此刻我的脑子突然 兴奋了起来,脑子想要飞速的码字,可手就是跟不上。关于重写父类的方法我是不是可以这样的理解。overrider重写的某种过程上并不能完全说是重写基类的方法。而是重写 子类从基类继承下的这个方法。这是不是也就解释了,父类对象调用方法或者使用多态性——父类对象引用子类对象(子类对象创建父类对象)调用方法时,还是调用父类原本的方法。关于多态性 我在我的博客一文里有写到...原创 2020-01-08 14:59:58 · 396 阅读 · 0 评论 -
Today toally experience——C#
1.只读 : Readonly 和const 是只读的不能对其修改;只能通过直接赋值和构造函数初始化时为它进行初始化赋值!2.属性通常用来封装私有字段 控制对私有字段的访问,这样可以控制各种行为。属性有两个块,分别是get容器和set容器 get:只读 set:只写当同时又get和set容器时意为可读可写。属性的两个块仅是限制外部代码的访问;因为同类的其他成员也可以访问属性块所访问的数...原创 2020-01-08 14:45:08 · 134 阅读 · 0 评论 -
有逻辑的抽扑克牌代码分析__怎么抽卡牌。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 抽纸牌{ public class Cards { Random randomNumber = new Rando...原创 2020-01-08 00:22:38 · 697 阅读 · 0 评论 -
C#实例化对象面向对象OOP的深入理解——构造函数篇
上篇文章我写到了 实例化对象是什么意思,什么是实例化,什么是对象。以及对多态性的了解;对实例化有困惑的可以去我的主页看看放上链接https://blog.csdn.net/HerJack/article/details/103857177这篇这篇文章主要是说实例化以及调用构造函数的原理过程首先大家都知道所有都派生与System.Object ;我们实例化子类对象时,需要通过构造函数初始...原创 2020-01-07 15:43:28 · 547 阅读 · 0 评论 -
实例化对象是什么意思,什么是实例化,什么是对象。多态性
Car mycar;上面Car 是我们自己定义的一个类 mycar则先可看作是变量名。其实也就叫做对象,在C#入门经典一书里称它为命名实例。书中说对象和类的实例的含义相同。那么怎么完成实例化呢。我们创建一个对象需要对它初始化数据。能够有这一作用的是什么呢?——构造函数。所以就有了 Car mycar= new Car();当我们自己定义了与类同名的有参构造函数时,假设参数类型是整型的,...原创 2020-01-06 14:48:46 · 16916 阅读 · 1 评论 -
ref的使用和理解-为什么要初始化,ref和out有什么区别。
Ref的使用及其理解 -》扩展out与ref首先从Ref和out的字面上的意思来看ref——引用参数out——输出参数显而易见从名字就可以下手了。引用参数及引用 了实参的值**,而不单单是传入值列表。**所以为什么要初始化这个问题就迎刃而解了!既引用则需要有一块空间;光声明定义一个变量不行,要赋值,因为赋值了才会开辟空间;给一个变量赋值 这叫做初始化。那out呢它的意思是 在函数...原创 2020-01-06 11:49:15 · 1552 阅读 · 0 评论 -
锯齿数组的理解——为什么锯齿数组要new,为什么要foreach要嵌套
**锯齿数组** int[][] a= new int[3][];Int[][] a= new int[3][]{new int[]{1,2,3},new int[] {1,2},new int[]{1}}Int[][] a= {new int[]{1,2,3},new int[] {1,2},new int[]{1}}锯齿数组创建锯齿数组下的元素 必须要new 创建对象开辟空间。...原创 2020-01-06 11:35:50 · 263 阅读 · 0 评论 -
结构为什么不用实例化对象
结构为什么不用实例化对象因为结构是值类型,值类型 的值存在栈中,不需要引用,不需要实例化对象引用 。关于堆栈概念可以自行了解堆栈概念提炼这一点也很重要另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义: 12int a=3;int b=3;编译器先处理int a=3;首先它会在栈中创建一个变量为a的内存空间,然后查找有没有字面值为3的地址,没找到,就开辟一个存...原创 2020-01-06 10:44:22 · 457 阅读 · 0 评论 -
数字转化16进制的方法_丢掉switch的繁琐。
今天是2020年1月5日 距离大一第一学期期末第一科英语考试还有15个小时,我却还在学习C#和Unity。我舍友有个好习惯,课上做的代码和老师讲的,他全拷贝下来了。所以我就,下午复习到了之前课上老师讲的 16进制转化相关的·实现代码。...原创 2020-01-05 18:48:16 · 728 阅读 · 0 评论 -
递增递减运算及赋值运算的理解分析——C#
1. 后递增递减运算符如果在变量后面 则整个运算操作完才执行递增递减的运算如下面图片所举的运算 的结果可看出当 递增递减运算符在变量后面时 在整个运算前不参与 递增或递减的运算。 也就是说直到整个运算结果值赋给var1完也不会对var1进行影响! var2-- 可看作在整个运算后 这个变量的单独运算 。 var2= var2-1;2.前如果其在变量前,在进行运算前就直接进行递增递减操作...原创 2020-01-05 11:53:24 · 659 阅读 · 0 评论 -
C#字符串分割Split用法分析
² String.Split的用法 :在一个字符串中,根据本设有的定义的分割字符或字符串,进行字符串的分割,将分割开的字符串分别依次存入一个数组成为数组内的不同元素。² 了解使用Split(char),Split(char[])的区别: split[char] 和split(char[])的区别在于 设置的分割符的多少.Split(char[])可以为分割字符串设置多个分割符但....原创 2020-01-04 19:05:56 · 1336 阅读 · 0 评论 -
C#接口抽象类什么时候用?接口与抽象类的区别。
当我们定义多个类,这几个类中有共同的属性和行为方法时,我们可以把这共用的成员抽象出来,作为这几个类的基类。如果希望这几个共有的成员,执行不同的操作,且不希望实例化抽象出来的基类。那么就可以使用抽象类定义基类,即使用abstract关键字声明Class并且abstract声明抽象类中方法(抽象类中可以有抽象方法也可以有实方法-》这里的实方法指的是非虚方法,abstract可以看做隐式的虚方法 ) ...原创 2020-01-01 22:06:13 · 1271 阅读 · 0 评论