您的位置:首页 > 移动开发 > Unity3D

unity3d开发 打飞机小游戏(五)(飞机移动/敌机死亡动画)

2017-01-20 23:50 399 查看
紧着这上一期,我们先来实现一下飞机的控制移动,我们就默认最常用的WASD来上下左右移动,方法其实很简单,主要通过Update()函数里面对用户对键盘的输入做一个检测就可以了,然后判定一下是不是超出边界就做完啦。

我们给飞机上的脚本,Update()里面添加一段代码就OK啦

if(Input.GetKey(KeyCode.W)){
if(transform.position.y <= 3.2f)
transform.Translate(Vector3.up * Speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S)){
if (transform.position.y >= -3.2f)
transform.Translate(Vector3.down* Speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A)){
if (transform.position.x >= -1.8f)
transform.Translate(new Vector3(1,0,0) * -Speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D)){
if (transform.position.x <= 1.8f)
transform.Translate(new Vector3(1, 0, 0) * Speed * Time.deltaTime);
}
然后呢我们对飞机,子弹,敌机,奖励物品给贴一个标签,以后呢会用到的,方法就是点击你的物品,在右边的属性那里有一个Tag,然后Add Tag新增就OK了,已经有prefabs的就直接在prefabs里面改就OK咯



然后呢我们给prefabs子弹添加一个碰撞器(Box Collider 2D)和刚体(Rigidbody 2D),其中刚体那里我们设置子弹不受重力影响,以及碰撞器的属性改为触发器,不然射出去就会往下掉(= =)


调节不受重力的方法就是把刚体属性Gravity Scale设为0,然后碰撞器的Is
Trigger打勾

之后我们拖一个prefabs到场景中调节一下碰撞器的大小范围是否正好符合子弹大小


这个绿色的框就是碰撞器的触发范围啦,一开始默认的可能会太大,需要自己调的

同样的我们给敌机只需要添加上Box Collider 2D

然后呢我们就在子弹的脚本处进行碰撞的检测啦

OnTriggerEnrter2D()是unity里面自带的碰撞检测的函数,不懂的可以查查帮助文档,这里面呢就用到了之前定义的tag,因为之后还会添加奖励物品的碰撞检测嘛,所以这样写是比较清晰的。

这里调用了GameObject里的一个函数SendMessage(),意思就是检测到碰撞到了other这个game object之后向它发送消息,让other调用自己的BeHit()方法

void OnTriggerEnter2D(Collider2D other){
if(other.tag == "Enemy"){
if (!other.GetComponent<Emeny>().isDeath){
//向敌机发送消息,调用函数BeHit
other.gameObject.SendMessage("BeHit");
GameObject.Destroy(this.gameObject);
}
}
}

我们在敌机的脚本上添加一些变量

public bool isDeath = false; //是否死亡

public Sprite[] explosionSprites; //死亡爆炸效果的数组
//死亡动画的计时器
private float timer=0;
//死亡动画每秒播放的帧数
public int explosionAnimationFrame=10;

private SpriteRenderer render;
在Start()中先获得它的SpriteRenderer组件
void Start(){
render = GetComponent<SpriteRenderer>();
}
在Update()函数中加上播放死亡动画的过程,都是老套路了嘛
if (isDeath){
timer += Time.deltaTime;
int frameIndex = (int)(timer / (1f / explosionAnimationFrame));
if (frameIndex >= explosionSprites.Length)
{
Destroy(this.gameObject);
}
else render.sprite = explosionSprites[frameIndex];
}
}
再添加一个控制生命的函数
public void BeHit(){
hp -= 1;
if (hp <= 0){
isDeath = true;
return;
}
}

这样添加完成后呢,在prefabs里给你的敌机把死亡模型拖到里面,就大功告成啦
是不是很简单呢?赶紧动手试一试吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐