6.15

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可以接收到,方便删除物体
        }
    }
}

}

你可能感兴趣的:(6.15)