飞机大战


脚本挂载

我方飞机上挂载  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点上)










  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值