local Enemy = class("Enemy");
local speed = 5;
function Enemy:ctor(go) --ctor是无参构造,只要new就会执行
self.gameObject = go;
self.transform = go.transform;
--增加碰撞
local luaTrigger = self.gameObject:AddComponent(typeof(LuaTrigger2D));
luaTrigger:SetExitFunc(self.OnTriggerExit,self);
UpdateBeat:Add(self.Update,self);
end
function Enemy:Update()
self.transform:Translate(Vector3.down*speed * Time.deltaTime);
end
--增加碰撞
function Enemy:OnTriggerExit(collision)
print("有碰撞产生");
UpdateBeat:Remove(self.Update,self);
destroy(self.gameObject); --functions中有destroy方法返回Destroy,所以不用大写
end
return Enemy;
--是将DestroyCollider中碰撞代码转入敌人中,类中需要:Add(self.Update) Enemy:Update()
--不是类一般是: Add(this.OnTriggerExit) DestroyCollider.OnTriggerExit
using UnityEngine;
using System.Collections;
using LuaInterface;
public class LuaTrigger2D : MonoBehaviour {
////增加的触发器脚本
//protected LuaFunction enterFunc; //lua的方法
//protected LuaFunction exitFunc;
//public void SetEnterFunc(LuaFunction func)
//{
// enterFunc = func;
//}
//public void SetExitFunc(LuaFunction func)
//{
// exitFunc = func;
//}
//private void OnTriggerEnter2D(Collider2D collision)
//{
// if (enterFunc!=null) //就是lua中,使用SetEnterFunc方法A,A方法中传入B方法为参数,如果B为空,就不激活lua方法B
// {
// enterFunc.Call(collision); //如果传入的方法B不为空,就激活传入的方法B
// }
//}
//private void OnTriggerExit2D(Collider2D collision) //出去时候触发,出发方法是一直检测不需要调用
//{
// if (exitFunc != null)
// {
// exitFunc.Call(collision); //修改:B方法中加入参数,lua方法B带参,lua可以接收到,方便删除物体
// }
//}
//增加的触发器脚本
LuaTable table;
protected LuaFunction enterFunc; //lua的方法
protected LuaFunction exitFunc;
public void SetEnterFunc(LuaFunction func,LuaTable tb=null)
{
enterFunc = func;
table = tb;
}
public void SetExitFunc(LuaFunction func, LuaTable tb = null)
{
exitFunc = func;
table = tb;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (enterFunc != null) //就是lua中,使用SetEnterFunc方法A,A方法中传入B方法为参数,如果B为空,就不激活lua方法B
{
if (table!=null)
{
enterFunc.Call(table,collision); //如果传入的方法B不为空,就激活传入的方法B
}
}
}
private void OnTriggerExit2D(Collider2D collision) //出去时候触发,出发方法是一直检测不需要调用
{
if (exitFunc != null)
{
if (table != null)
{
exitFunc.Call(table,collision); //修改:B方法中加入参数,lua方法B带参,lua可以接收到,方便删除物体
}
}
}
}