自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Lua系统学习16-协同程序Coroutine

协同程序Coroutine协同程序就是指在一个线程中的同步执行,它是在某个线程下的,由一个线程发起调用,然后挂起。在一个线程中同一时刻只能运行一个协同程序。关于协同程序 深入了解与实现 可以看我的一个视频 协同程序实现精讲在lua中 我们使用create创建一个新的协同程序,传入参数是一个函数, create会返回一个thread类型的值。lua中的协同程序 分别 由4中状态 1.挂起 2.运行 3.死亡 4正常。当创建一个协同程序时候它处于挂起状态,我们可以通过函数status来检查协同程序的状

2021-12-10 18:07:36 2509

原创 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 1117

原创 lua系统学习14-动态加载与编译

编译loadstringloadingstring与loadfile类似 不同之处在于它是从一个字符串中读取代码,而非从文件读取。f=loadstring(“i=i+1”)—此时loadstring返回的是一个函数。这就是解释性语言的好处,直接在编译之后动态的去加载代码。假设我们使用loadfile读取文件,文件若是为空调用的时候将会导致异常报错。我们可以使用assert 更清楚地显示错误消息。当发生错误的时候 assert用来引发一个错误。f=assert(loadstring(“io_st

2021-11-24 18:08:28 401

原创 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 542

原创 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 376

原创 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 4311

原创 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 703

原创 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 539

原创 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 386

原创 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 507

原创 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 598

原创 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 600

原创 lua系统学习05-表达式

函数:函数可以存储在变量中,可以作为函数的参数 可以作为返回值。可以重新定义函数增加新的功能 ///这句话暂时没理解 是指动态时期重新定义?还可以避免运行不可靠代码创建安全运行环境而隐藏函数lua的所有标准库都是c实现的。所以可以调用lua或c实现的函数。UserData自定义类型userdata可以将c数据置入在lua变量中。userdata 用来描述应用程序或者使用 C 实现的库创建的新类型。例如:用标准 I/O 库来描述文件。表达式常量 、变量、点操作符、一元运算符、二元运算符、

2021-11-11 16:54:22 596

原创 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 346

原创 lua系统学习03-变量类型

类型基础类型nil空 boolean布尔 number数字 string字符串 userdata自定义类型 function函数 thread线程 table表可以通过print打印出变量的类型任何变量都可以包含任何类型的值nil 所有变量在未赋值前全是为nil 赋值为nil等于将其数据删除。boolean :false true 在lua中不仅是这两种表示方式,在lua中将值false 和nil视作为假将其他所有值 视为真。包括数字0和空字符串也都视为真。number 表示实数 使用双精

2021-11-09 22:50:51 718

原创 lua系统学习02-变量

二、变量:全局变量在像Lua、python这种弱脚本语言当中 不需要声明变量类型,而且变量可以未初始化,即使使用了未初始化的变量 也不会出错,未初始化的变量默认未Nil 如 二进制数据0000000想要删除一个变量只要将变量赋值为Nil类型 。在弱语言类型中变量没有特殊的指定,它可以动态的指定任意类型的数据。**命名规范:**字母或者下划线开头的字母 .最好不要使用下划线加大写字母的标示符,因为 Lua 的保留字也是这样的。保留字:以下字符为 Lua 的保留字,不能当作标识符。and bre

2021-11-09 22:47:31 423

原创 Lua系统学习01-DOFile加载函数

一。加载外部函数dofile加载外部函数并执行代码示例:------ Generated by EmmyLua(https://github.com/EmmyLua)--- Created by Admin.--- DateTime: 2021/11/8 13:49---print("hello world")dofile("C:\\File\\Lua\\OutSideLua.lua")print(twice(2))外部函数 outSideLuaprint("hello worl.

2021-11-09 22:43:30 612

原创 Unity的TransformDirection、Vector3、Point是有什么作用?不同

transform.direction和transformpoint还有transform.vector3 有什么区别?经过测试后,个人觉得没有区别,如若有区别还请网友指点。通过官方手册可以看到 具体描述 transform.direction 它将一个局部坐标转换成一个世界坐标。它只受比例影响。具体解释一下,通这个方法做相机跟随。代码如下首先我们在开始就计算了相机到人物间的向量 叫......

2020-02-10 23:43:15 2469

原创 Unity的lookRotation和lookAt的区别理解,是什么意思。

我们追溯两个方法的所在的类,看到lookAt是Transform下的一个含参方法,这个参数指定一个物体对象的transform或transform。position。准确说是一个三维坐标点。代表当前Transform的朝向即rotation的四元素的z轴是面向于所设的参数点。而lookRotation是四元素下的一个方法跟lookat一样有三个重载, 它的z轴朝向跟所设向量参数的方向一致,如何...

2020-02-01 10:52:46 3788

原创 关于unity为什么不能使用transform.position.x/y/z的写法以及正确写法分析

首先我们查看position定义(光标position下alt+F12)可以看到以下几点1.position是vector3向量下的一个属性。2.vector向量是结构体 ,结构体是值类型.好的现在来说为什么不能这么写transform.position.x=10;//error首先通过点1 我们知道position是一个属性当我们访问position时 通过get容器 返回了一个自动...

2020-01-28 10:57:19 2387

原创 关于overrider虚方法重写——虚方法怎么使用的概念理解

关于虚方法此刻我的脑子突然 兴奋了起来,脑子想要飞速的码字,可手就是跟不上。关于重写父类的方法我是不是可以这样的理解。overrider重写的某种过程上并不能完全说是重写基类的方法。而是重写 子类从基类继承下的这个方法。这是不是也就解释了,父类对象调用方法或者使用多态性——父类对象引用子类对象(子类对象创建父类对象)调用方法时,还是调用父类原本的方法。关于多态性 我在我的博客一文里有写到...

2020-01-08 14:59:58 363

原创 Today toally experience——C#

1.只读 : Readonly 和const 是只读的不能对其修改;只能通过直接赋值和构造函数初始化时为它进行初始化赋值!2.属性通常用来封装私有字段 控制对私有字段的访问,这样可以控制各种行为。属性有两个块,分别是get容器和set容器 get:只读 set:只写当同时又get和set容器时意为可读可写。属性的两个块仅是限制外部代码的访问;因为同类的其他成员也可以访问属性块所访问的数...

2020-01-08 14:45:08 115

原创 有逻辑的抽扑克牌代码分析__怎么抽卡牌。

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 658

原创 C#实例化对象面向对象OOP的深入理解——构造函数篇

上篇文章我写到了 实例化对象是什么意思,什么是实例化,什么是对象。以及对多态性的了解;对实例化有困惑的可以去我的主页看看放上链接https://blog.csdn.net/HerJack/article/details/103857177这篇这篇文章主要是说实例化以及调用构造函数的原理过程首先大家都知道所有都派生与System.Object ;我们实例化子类对象时,需要通过构造函数初始...

2020-01-07 15:43:28 497

原创 实例化对象是什么意思,什么是实例化,什么是对象。多态性

Car mycar;上面Car 是我们自己定义的一个类 mycar则先可看作是变量名。其实也就叫做对象,在C#入门经典一书里称它为命名实例。书中说对象和类的实例的含义相同。那么怎么完成实例化呢。我们创建一个对象需要对它初始化数据。能够有这一作用的是什么呢?——构造函数。所以就有了 Car mycar= new Car();当我们自己定义了与类同名的有参构造函数时,假设参数类型是整型的,...

2020-01-06 14:48:46 16822 1

原创 ref的使用和理解-为什么要初始化,ref和out有什么区别。

Ref的使用及其理解 -》扩展out与ref首先从Ref和out的字面上的意思来看ref——引用参数out——输出参数显而易见从名字就可以下手了。引用参数及引用 了实参的值**,而不单单是传入值列表。**所以为什么要初始化这个问题就迎刃而解了!既引用则需要有一块空间;光声明定义一个变量不行,要赋值,因为赋值了才会开辟空间;给一个变量赋值 这叫做初始化。那out呢它的意思是 在函数...

2020-01-06 11:49:15 1474

原创 锯齿数组的理解——为什么锯齿数组要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 242

原创 结构为什么不用实例化对象

结构为什么不用实例化对象因为结构是值类型,值类型 的值存在栈中,不需要引用,不需要实例化对象引用 。关于堆栈概念可以自行了解堆栈概念提炼这一点也很重要另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义: 12int a=3;int b=3;编译器先处理int a=3;首先它会在栈中创建一个变量为a的内存空间,然后查找有没有字面值为3的地址,没找到,就开辟一个存...

2020-01-06 10:44:22 426

原创 数字转化16进制的方法_丢掉switch的繁琐。

今天是2020年1月5日 距离大一第一学期期末第一科英语考试还有15个小时,我却还在学习C#和Unity。我舍友有个好习惯,课上做的代码和老师讲的,他全拷贝下来了。所以我就,下午复习到了之前课上老师讲的 16进制转化相关的·实现代码。...

2020-01-05 18:48:16 682

原创 递增递减运算及赋值运算的理解分析——C#

1. 后递增递减运算符如果在变量后面 则整个运算操作完才执行递增递减的运算如下面图片所举的运算 的结果可看出当 递增递减运算符在变量后面时 在整个运算前不参与 递增或递减的运算。 也就是说直到整个运算结果值赋给var1完也不会对var1进行影响! var2-- 可看作在整个运算后 这个变量的单独运算 。 var2= var2-1;2.前如果其在变量前,在进行运算前就直接进行递增递减操作...

2020-01-05 11:53:24 613

原创 C#字符串分割Split用法分析

² String.Split的用法 :在一个字符串中,根据本设有的定义的分割字符或字符串,进行字符串的分割,将分割开的字符串分别依次存入一个数组成为数组内的不同元素。² 了解使用Split(char),Split(char[])的区别: split[char] 和split(char[])的区别在于 设置的分割符的多少.Split(char[])可以为分割字符串设置多个分割符但....

2020-01-04 19:05:56 1279

原创 C#接口抽象类什么时候用?接口与抽象类的区别。

当我们定义多个类,这几个类中有共同的属性和行为方法时,我们可以把这共用的成员抽象出来,作为这几个类的基类。如果希望这几个共有的成员,执行不同的操作,且不希望实例化抽象出来的基类。那么就可以使用抽象类定义基类,即使用abstract关键字声明Class并且abstract声明抽象类中方法(抽象类中可以有抽象方法也可以有实方法-》这里的实方法指的是非虚方法,abstract可以看做隐式的虚方法 ) ...

2020-01-01 22:06:13 1230

空空如也

空空如也

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

TA关注的人

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