[Unity2D]实现子弹射击的脚本
先把子弹做成prefab组件,添加刚体、碰撞器和脚本。
using UnityEngine; using System.Collections; public class Rocket : MonoBehaviour { public GameObject explosion; // 爆炸的效果Prefab组件(一个爆炸的动画) void Start () { // 设置两秒钟之后销毁子弹对象 Destroy(gameObject, 2); } // 爆炸的方法 void OnExplode() { // 创建一个四元数 Quaternion,取一个随机的旋转角度 // Quaternion.Euler 欧拉角 // 返回一个旋转角度,绕y轴旋转y度,绕x轴旋转x度,绕z轴旋转z度。 Quaternion randomRotation = Quaternion.Euler(0f, 0f, Random.Range(0f, 360f)); // 初始化explosion的实例 Instantiate(explosion, transform.position, randomRotation); } void OnTriggerEnter2D (Collider2D col) { // 如果子弹碰撞到敌人 if(col.tag == "Enemy") { // 找到敌人对应的脚本,调用其Hurt方法,敌人掉血 col.gameObject.GetComponent<Enemy>().Hurt(); // 调用爆炸方法 OnExplode(); // 销毁当前的子弹对象 Destroy (gameObject); } // 如果碰撞到补充物体,BombPickup else if(col.tag == "BombPickup") { // 找到其对应的脚本,调用Explode方法,物体爆炸 col.gameObject.GetComponent<Bomb>().Explode(); // 销毁碰撞的物体对象 Destroy (col.transform.root.gameObject); // 销毁当前的子弹对象 Destroy (gameObject); } // 如果碰撞到非玩家的其他碰撞器 else if(col.gameObject.tag != "Player") { // 调用爆炸效果,销毁子弹 OnExplode(); Destroy (gameObject); } } }
创建子弹发出的枪口对象和脚本,注意这个枪口是一个Empty GameObject,记录子弹发出的位置。给改游戏对象添加音频和脚本。
using UnityEngine; using System.Collections; public class Gun : MonoBehaviour { public Rigidbody2D rocket; // 子弹 Prefab public float speed = 20f; // 子弹飞行速度 private PlayerControl playerCtrl; // 玩家控制脚本 private Animator anim; // 动画管理器 void Awake() { // 获取对象根目录(也就是对顶层的对象)的动画管理器和玩家控制脚本 anim = transform.root.gameObject.GetComponent<Animator>(); playerCtrl = transform.root.GetComponent<PlayerControl>(); } void Update () { // 开火按钮按下 if(Input.GetButtonDown("Fire1")) { // 设置动画控制器的Trigger参数Shoot,表示播放射击动画 anim.SetTrigger("Shoot"); // 播放音频 audio.Play(); // 玩家对象面向右边 if(playerCtrl.facingRight) { // 初始化子弹 Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,0))) as Rigidbody2D; // velocity直接给物体一个固定的移动速度 bulletInstance.velocity = new Vector2(speed, 0); } else { // 子弹向左边旋转 Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,180f))) as Rigidbody2D; bulletInstance.velocity = new Vector2(-speed, 0); } } } }
posted on 2014-09-25 02:05 linzheng 阅读(10220) 评论(0) 编辑 收藏 举报