脚本挂载
我方飞机上挂载 PlaneCtrl脚本
背景面板上添加
子弹上添加
敌军上添加
子弹位置的空对象
在Game.lua脚本中注册
///<summary>
///脚本挂载在 飞机预制体上
///</summary>
publicclassplaneCtrl : MonoBehaviour
{
// Use this for initialization
voidAwake()
{
//执行lua的方法 PlaneCtrl 为关联lua的脚本
Util.CallMethod("PlaneCtrl","Awake",gameObject);
}
// Update is called once per frame
voidUpdate()
{
Util.CallMethod("PlaneCtrl", "Update", gameObject);
}
}
创建Lua脚本PlaneCtrl
--我方飞机
PlaneCtrl = {};
local this =PlaneCtrl;
local transform;
local gameObject;
--子弹位置
local firepos;
--子弹
local bullet;
functionPlaneCtrl.Awake(go)
gameObject = go;
transform = go.transform;
--找到子弹位置
firepos=transform:Find("firepos");
--加载子弹
bullet=resMgr:LoadPrefab('bullet', {'bullet' }, this.InitBullet);
--加载分数
locals=transform:Find("Canvas/Image/score");
this.score=s:GetComponent('Text');
--加载倒计时
localt=transform:Find("Canvas/Image/time");
this.times=t:GetComponent('Text');
--加载生命
localh=transform:Find("Canvas/Image/hp");
this.hp=h:GetComponent('Text');
end
--子弹的回调函数
functionPlaneCtrl.InitBullet(gos)
bullet=gos[0]
end
local num=60
functionPlaneCtrl.Update()
--倒计时显示
num=num-0.02
this.times.text=tostring(math.ceil(num))
--移动
localh=UnityEngine.Input.GetAxis("Horizontal");
localv=UnityEngine.Input.GetAxis("Vertical");
if (h~=0 or v~=0) then
v3=transform.position
--边界限定
v3.x= Mathf.Clamp(v3.x+h*0.2,-4,4)
v3.z= Mathf.Clamp(v3.z+v*0.2,-5,7)
transform.position=v3
end
--生成子弹
if UnityEngine.Input.GetMouseButtonDown(0)then
temp=newObject(bullet)
temp.transform.position=firepos.position
end
end
敌方随机生成 挂载在背景图上脚本 enemyLoad
///<summary>
///挂载在地面上,随机生成敌军
///</summary>
publicclassenemyLoad : MonoBehaviour
{
// Use this for initialization
voidAwake()
{
Util.CallMethod("enemyLoad", "Awake", gameObject);
}
// Update is called once per frame
voidUpdate()
{
Util.CallMethod("enemyLoad", "Update", gameObject);
}
在Lua中创建脚本 enemyLoad
--敌军的随机生成的位置
enemyLoad = {};
local this = enemyLoad;
local transform;
local gameObject;
local enemy;
local y=0
function enemyLoad.Awake(go)
gameObject =go;
transform =go.transform;
--加载地方
enemy=resMgr:LoadPrefab('enemy', { 'enemy' }, this.InitEnemy);
end
function enemyLoad.InitEnemy(gos)
enemy=gos[0]
end
--随机生成敌方的代码
function enemyLoad.Update()
y=y+1
if y%40==0then
temp=newObject(enemy)
temp.transform.position=Vector3.New(math.random(-3.79,3.69),0.09,8.33)
end
end
敌方上挂个脚本enemyPlane(敌方飞机)
///<summary>
///挂载在敌军飞机上
///</summary>
publicclassenemyPlane : MonoBehaviour
{
// Update is called once per frame
voidUpdate()
{
//加载lua脚本
Util.CallMethod("enemyCtrl", "Update", gameObject);
}
privatevoidOnTriggerEnter(Collider other)
{
Util.CallMethod("BulletCtrl", "OnTriggerEnter",newobject[] { this.gameObject,other.gameObject});
}
}
在Lua中创建enemyCtrl 脚本 控制敌军
--敌军移动
enemyCtrl = {};
local this = enemyCtrl;
function enemyCtrl:New(o,go)
o=o or {}
setmetatable(o,self)
self.__index=self
o.gameObject=go
o.transform=o.gameObject.transform
return o
end
function enemyCtrl:Update()
self.transform:Translate(-self.transform.forward*UnityEngine.Time.deltaTime*10)
end
让子弹移动 ,还有和敌方的碰撞
///<summary>
///子弹,挂载在子弹预制体上
///</summary>
publicclassBulletCtrl : MonoBehaviour
{
// Use this for initialization
voidAwake()
{
Util.CallMethod("BulletCtrl","Awake",gameObject);
}
// Update is called once per frame
voidUpdate()
{
Util.CallMethod("BulletCtrl", "Update", gameObject);
}
}
Lua代码如下 BulletCtrl
-- 子弹
BulletCtrl = {};
local this = BulletCtrl;
function BulletCtrl:New(o,go)
o=o or {}
setmetatable(o,self)
self.__index=self
o.gameObject=go
o.transform=o.gameObject.transform
return o
end
function BulletCtrl:Update()
print("525252525252525252525252525252525252525252")
self.transform:Translate(-self.transform.forward*UnityEngine.Time.deltaTime*30)
end
local num=0;
local num1=5;
--碰撞检测
function BulletCtrl.OnTriggerEnter(...)
local res={...}
local enemy=res[1]
localbullet=res[2]
ifbullet.name~="plane" then
destroy(enemy)
destroy(bullet)
else
--当敌方和自己的飞机碰撞,生命-1
num1=num1-1
PlaneCtrl.hp.text=tostring(num1)
--当生命=0,自己的飞机销毁
if num1==0 then
destroy(bullet)
end
destroy(enemy)
end
--碰撞成功后,得分加1
num=num+1
PlaneCtrl.score.text=tostring(num)
End
备注:碰撞一些细节
自己飞机 刚体 和碰撞器(isTrigger点上)
敌方 碰撞器(isTrigger不点)
子弹 刚体 和碰撞器(isTrigger点上)