6.15

作者: 123654a | 来源:发表于2018-06-15 17:54 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/auimeftx.html