Unity3D《太空战机》如何给战机加上防护罩



几乎任何一款太空射击类游戏都会为玩家战机提供防护罩(shield)的功能,防护罩开启时,玩家几乎处于“无敌”状态,但是防护罩通常有一定的时间限制,而且使用次数有限。

那么使用Unity如何为《太空战机》类的游戏中的战机设计防护罩呢?

我的解决方案是:

由于敌人对玩家的伤害主要通过碰撞检测完成。而碰撞检测通过tag识别完成,因此可以添加防护罩的功能就是把玩家的tag改变成敌人无法碰撞识别的tag。

防护罩持续的时间可以用帧的计数来实现。

防护罩的开启可以由玩家点击“防护罩"按钮或者吃到防护罩的奖品来完成。下面我的实现是由玩家点击按钮来实现防护罩的功能,具体代码如下:shield.cs:

using UnityEngine;
using System.Collections;

public class shield : MonoBehaviour {
 GameObject root;      //根节点对象(Player即玩家战机)
 GameObject shield0;   //子节点对象(Player的子对象即防护罩光晕)
 public float jishi=1; //每一帧增加的数目
 bool showshield;
 // Use this for initialization
 void Start () {    //寻找Player对象的子对象shields(防护罩)让其初始化时无效。
  root=GameObject.Find ("Player");
  shield0=root.transform.Find("shields").gameObject;
  shield0.SetActive (false);
 }
 
 // Update is called once per frame
 void Update () {
  //transform.Find ("shield").enabled = true;
  jishi += Time.deltaTime;
  if (jishi > 20) {     //在点击防护罩按钮后的20帧的时间段内玩家处于无敌状态。超过20帧的时间,防护罩消失。
      shield0.SetActive (false);
      root.tag = "Player";//此时玩家标志为Player,敌人可以识别该标志,这时敌人对玩家可以产生伤害。
      jishi=1;       //初始化计时基数为1.
    }
 }

 void OnGUI(){

  if (GUI.Button (new Rect (0, 500, 100, 50),""+jishi))
  { //点击防护罩按钮就会出现防护罩
   shield0.SetActive (true);
   jishi=1;                        //初始计数基数为1.
   root.tag="up";    //此时玩家战机(Player)对象的标志tag设置为up,由于敌人不能识别up标志,那么敌人对玩家就没有伤害。此时玩家处于无敌状态。

  }
 }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值