Unity3D学习笔记(三十):Lua
print("Hello World") --单行注释
--print("单行注释") --多行注释
--[[
print("多行注释1")
]] --[[
print("多行注释2")
--]] --[[
print("多行注释3")
]]
--变量定义
--C#
--int a = 1;
--Lua
a =
A =
_ =
print(a)
print(A)
print(_) --变量赋值
b = true
print(b)
print(type(b))
b=
print(b)
print(type(b)) --number类型
c =
d = 1.2
print(c)
print(type(c))
print(d)
print(type(d)) --三种打印字符串的方式
e = "Hello World"
f = 'Hello World'
g = [[Hello World]]
print(e, f, g) --..连接字符串
x = ""
y = ""
print(x + y)--加号表示算数运算
print(x .. y) --#计算变量长度
print(#e)
print(#"Hello World")
print(#"你好")--汉字占两个字节
--C# int[] a = new int[]{1, 2, 3}; --Lua的table
a = {, , }
print(a[])
print(type(a)) --创建一个空表
b = {} --创建一个表,并且对表进行初始化赋值
c = {"string", true, , nil} --table的访问
print(c[]) --table的修改
c[] =
print(c[]) print(#c)--能算table长度,但不一定是真实长度 --table的添加
c[] = --table的方法:数组的插入和删除(索引的连续性)
--第一个参剩:表的名字
--第二个参数:插入的内容
--依次向后找,只要找到一个nil的位置就把内容插入进去
table.insert(c, "你好")
print(c[])--结果:你好 --第二个参数:要插入的位置,可以跳跃性的插入
table.insert(c, , "小明")
print(c[])--结果:小明 --从第三个位置的元素开始,后面的元素依次后移
table.insert(c, , "小红")
print(c[])--结果:小红
print(c[])--结果:1 --删除
--删除指定索引的位置的元素,后面的元素依次前移
d = {, , "你好", true}
table.remove(d, )
print(d[])--结果:4 --删除连续索引的最后一个元素
d[] =
table.remove(d)
print(d[])--结果:nil
print(d[])--结果:10
--table的索引
a = {}
a[] =
print(a[]) --把字符串作为一个索引
a["a"] = "nihao"
print(a["a"]) --table可以有0号索引
a[] =
print(a[])
--table可以有负号索引
a[-] =
print(a[-]) print("-----------------")
b = {[] = , , , , , [-] = , ["nihao"] = "你好", key = "不好", c = {, }}
print(b[])
print(b[])--会被覆盖掉
print(b[])
print(b[])
print(b[])
print(b[])
print(b[])
print(b[-])
print(b["nihao"]) --第一种访问字符串为索引的元素
print("-----------------")
print(b["nihao"])
--第二种访问字符串为索引的元素
print(b.nihao)
print(b["key"])
print(b.key)
print(b.c[])
--table.insert(c, 3, "小红")--报错:只能针对数组
--table.remove(c, 2)--报错:只能针对数组 --添加字符串为索引的元素
b["key1"] = "可以"
b.key2 = "不可以"
d = "可不可以"
print(b.key1)
print(b["key2"])
print(b[d]) print(#b)--结果:4,从1号位索引开始算,一旦索引断掉,就不往后面计算 f = {[] = }
print(#f)
--流程控制语句
--C# if(条件){} --Lua
--if语句
--[[
if 条件 then
print("if语句满足,执行")
end
]]-- if true then
print("if语句满足,执行")
end --if else语句
if a then
print("if语句满足,执行")
else
print("if语句不满足,执行")
end --if elseif语句
if a then--一般条件后面才加then关键字
print("if语句满足,执行")
elseif b then--注意elseif是连着的
print("if语句不满足,执行")
end --if elseif else语句
if a then
print("if语句满足,执行")
elseif b then--注意elseif是连着的
print("if语句不满足,执行")
else
print("if语句都不满足,执行")
end
循环控制语句
--循环控制语句
--C# for,while,do while --Lua
--while
a =
while a < do
print(a)
a = a +
end print("-------------") --do while C#条件满足继续执行循?
--repeat 循环体 until 条件 条件满足跳出循环
a =
repeat
print(a)
a = a +
until a < print("-------------") --for 变量定义,条件,每次循环累加值 do 循环体 end
--条件就是一个数,变量 <= 条件,每次累加值可以不写,不写默认为1
--对于循环,有break关键字跳出,但是没有continue关键字
for a = , , do
print(a)
end
--方法
function func3()
func1()
end --方法的定义1 function 方法名(参数) 方法体 end
function func1()
print("func1")
end --方法的定义2 方法名 = function(参数) 方法体 end
func2 = function()
print("func2")
end --方法的调用,先定义再调用
func1()
func2()
func3() print("--------有参数的方法--------") --有参数的方法
func4 = function(a, b)
print(a, b)
end func4()--可以不传参数,按照nil处理
func4()--可以少传
func4(, )
func4(, , )--可以多传,只取前2个 print("--------可变参数的方法--------")
--可变参数的方法,参数位置用...表示是可以传任意的参数
--通过arg来取传入的参数,arg实际就是一表表示的数组
--当调用的时候,把所有传递进来的参数存入到arg中
func5 = function(...)
print(#arg)
for i = , #arg do
print(arg[i])
end
end func5(,,,,,,)
func5(,"nihao",true,,,,false,nil) print("--------带返回值的方法--------")
--带返回值的方法
func6 = function()
return "func6"
end a = func6()
print(func6(), a) print("--------带多个返回值的方法--------")
--带多个返回值的方法
--多个返回值使用多个变量去接收,每个变量之间以逗号区别
--返回值与接收变量可以数量不一致,多退少补
func7 = function()
return "a", true, , false
end r1,r2,r3,r4 = func7() print(func7())
print(r1,r2,r3,r4) func8 = function()
local z = "c"
end func8()
print("z:", z)
类
--类
a = {,,,,,,} --遍历
for i = , #a do
print(a[i])
end for key, value in ipairs(a) do
print("key", key)
print("value", value)
end b = {,,,,[-] = , ["key"] = "key", key1 = true}
--ipairs()这种方式只能比哪里出数值类型
for key, value in ipairs(b) do
print("key", key)
print("value", value)
end
--pairs()这种方式能全部遍历出键和值
for key, value in pairs(b) do
print("key", key)
print("value", value)
end
--lua8
print("开始执行Lua8") local lua8 = {}
lua8.const = function lua8.func1()
print("func1")
end lua8.func2 = function()
print("lua8.func2")
end function lua8.func3()
print("lua8.func3")
end print("结束执行Lua8") return lua8
--lua10
print("开始执行Lua10") local lua8 = {func4 = function() print("func4") end, key = }
lua8.const = function lua8.func1()
print("Lua10.func1")
end lua8.func2 = function()
print("Lua10.func2")
end function lua8.func3()
print("Lua10.func3")
end print("结束执行Lua10") return lua8
Lua11.lua文件,在根目录下的Lua文件夹下
--Lua11
print("开始执行Lua11")
--require("Lua8")
--require('Lua8')
lua10 = require'Lua10'
lua8 = require'Lua8' --func()
print(lua8.const)
print(lua10.const) lua8.func3()
lua10.func3() --package.path 里存储的都是require所能执行的lua的文件路径
--print(package.path) --package.path = package.path .. ";D:\\LuaProject\\Lua\\?.lua"
--..\\上级目录,.\\文件的当前目录
package.path = package.path .. ";.\\Lua\\?.lua" print(package.path) require'Lua11'
tab1 = {"tab1", "", ''}
tab2 = {"tab2", , true}
Set = {__add = function(t1, t2)--__add原方法
for k1, v1 in pairs(t1) do
print(k1, v1)
end
print("--------------")
for k1, v1 in pairs(t2) do
print(k1, v1)
end
return "Set"
end}
setmetatable(tab2, Set)--设置元表,把Set这个表设置成tab1的元表
t = tab1 + tab2
--当两个表进行相加操作时,先判断两个表是否有元表?
--如果两个表都没有元表,两个表不能进行相加操作
--如果两个表任意一个表有元素
--再判断元表内是否有__add的元方法
--如果元表里没有__add的元方法,不会执行,报错
--如果有__add的元方法,那么两个表可以相加
--并且相加的结果,就是__add的返回值
--__add的参数1是加号左边的表,参数2是加号右边的表
print(t) tab = getmetatable(tab2)
print(tab)
print("--------------") tab3 = {key = "k1"}
Set1 = {__index = function(t1, key)
print(type(t1))
for k1, v1 in pairs(t1) do
print(k1, v1)
end
print(type(key), key)
return "Set1"
end} setmetatable(tab3, Set1) --当你要访问一个键对应值时,先判断这个表中有没有这个键,如果有就返回这个键对应的值
--如果这个表没有这个键,先判断这个表有没有元表
--如果有元表,再判断这个元表有没有__index的元方法
--如果有,访问的值就是这个__index返回的值
--__index里的参数1:表,参数2:要访问的键名 print(tab3.key1)

public float length { get; }//动画播放时长
public float normalizedTime { get; }//动画当前规范化时间,1是动画结尾,0.5是动画中间
public bool IsName(string name);
public bool IsTag(string tag);
public class SkillOverStateBehaviour : StateMachineBehaviour {
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
//PlayerController pc = animator.GetComponent<PlayerController>();//获取动画组件身上的脚本
//pc.atkID = 0;//把脚本里的atkID归零
//animator.SetInteger("skillID", 0);//把animator面板里的skillID归零
animator.SetInteger("skillID", );
}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PlayerControl : MonoBehaviour
{
Animator anim;
private void Awake()
{
anim = GetComponent<Animator>();
}
private void Start()
{ }
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
AnimatorStateInfo animSta = anim.GetCurrentAnimatorStateInfo();
if (animSta.IsName("skill1") && animSta.normalizedTime > 0.3f)
{
anim.SetInteger("skillID", );
}
else if(animSta.IsName("skill2"))
{
anim.SetInteger("skillID", );
}
else if(animSta.IsName("skill3"))
{
anim.SetInteger("skillID", );
}
else if(animSta.IsName("skill4"))
{
anim.SetInteger("skillID", );
}
else if(animSta.IsName("skill5"))
{
anim.SetInteger("skillID", );
}
else if(animSta.IsName("skill6"))
{
anim.SetInteger("skillID", );
}
else
{
anim.SetInteger("skillID", );
}
}
}
}
Unity3D学习笔记(三十):Lua的更多相关文章
- angular学习笔记(三十)-指令(10)-require和controller
本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...
- angular学习笔记(三十)-指令(7)-compile和link(2)
继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的 ...
- angular学习笔记(三十)-指令(7)-compile和link(1)
这篇主要讲解指令中的compile,以及它和link的微妙的关系. link函数在之前已经讲过了,而compile函数,它和link函数是不能共存的,如果定义了compile属性又定义link属性,那 ...
- angular学习笔记(三十)-指令(6)-transclude()方法(又称linker()方法)-模拟ng-repeat指令
在angular学习笔记(三十)-指令(4)-transclude文章的末尾提到了,如果在指令中需要反复使用被嵌套的那一坨,需要使用transclude()方法. 在angular学习笔记(三十)-指 ...
- angular学习笔记(三十)-指令(5)-link
这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...
- angular学习笔记(三十)-指令(2)-restrice,replace,template
本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...
- angular学习笔记(三十)-指令(1)-概述
之前在 angular学习笔记(十九)-指令修改dom 里面已经简单的提到了angular中的指令,现在来详细的介绍 '指令' 一.指令的创建: dirAppModule.directive('dir ...
- 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...
- 【Unity 3D】学习笔记三十:游戏元素——游戏地形
游戏地形 在游戏的世界中,必然会有非常多丰富多彩的游戏元素融合当中. 它们种类繁多.作用也不大同样.一般对于游戏元素可分为两种:经经常使用.不经经常使用.经常使用的元素是游戏中比較重要的元素.一般须要 ...
- unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条
原地址:http://blog.csdn.net/lzhq1982/article/details/18793479 本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. htt ...
随机推荐
- .net web site 和 web application 的区别
web application 会把所有的代码编译打包成单一的库文件(.dll). web site 不会对整个的代码进行编译,在运行时须要哪一段代码就编译哪段代码.这导致web site 上线后,如 ...
- this上下文一致
什么是this对象 先来说说什么是this对象吧,每个函数在调用的时候都会自动获取两个特殊变量:this和arguments对象.this值具体是指哪个对象是和该函数的执行环境相关的.如果是作为对象的 ...
- laravel 服务容器实例——深入理解IoC模式
刚刚接触laravel,对于laravel的服务容器不是很理解.看了<Laravel框架关键技术解析>和网上的一些资料后对于服务容器有了一些自己的理解,在这里分享给大家 1.依赖 IoC模 ...
- mac下编译cpu only caffe并用xCode建caffe工程
mac编译caffe 好像又变容易了,直接git clone下载blvc源码,make.config里去掉了CPU_ONLY前面的注释,并没有安装任何依赖,也可能是自己mac上本来有, xCode里调 ...
- 输出列表为字符串,并在最后一个值前加上and 4.10.1
逗号代码: def test4(lis): str1='' for i in range(len(lis)-1): str1+=(str(val[i])+', ') str1+=('and '+str ...
- jdk和jre区别
- 设计模式之Composite(组合)(转)
Composite定义: 将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Comp ...
- HashMap集合存储自定义类
第一种情况,key为String,value为自定义类person类: 输出结果,key重复的被去掉了,key重复的那个value值之前的被最后一个覆盖了: 第二种情况,key为自定义类person类 ...
- JDK8 元空间
1. 运行时常量池和静态变量都存储到了堆中,MetaSpace存储类的元数据,MetaSpace直接申请在本地内存中(Native memory),这样类的元数据分配只受本地内存大小的限制,OOM问题 ...
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...