2.8.2 发射子弹
来源:互联网 发布:淘宝上买琵琶靠谱吗? 编辑:程序博客网 时间:2024/04/28 06:19
http://book.2cto.com/201410/47221.html
将新敌人放到场景中,运行游戏,会发现新敌人缓缓向前,但不会做其他事情。我们接下来会为其添加一点新功能,使其可以向主角发射子弹,更有威胁。
使用rocket.fbx创建一个新的子弹Prefab,命名为EnemyRocket,再为其创建一个新的材质,使用rocket2.png作为贴图,使敌人的子弹看上去与主角的不同一些。
为敌人子弹添加Rigidbody和Box Collider组件并正确设置。
为敌人子弹新建一个名为EnemyRocket的Tag。
创建EnemyRocket.cs脚本,它将继承Rocket类的大部分功能,我们只需要略修改一下OnTriggerEnter方法,使其只能与主角飞船发生碰撞,如下所示
using UnityEngine;using System.Collections; [AddComponentMenu("MyGame/EnemyRocket")]public class EnemyRocket : Rocket{ void OnTriggerEnter( Collider other ) { if ( other.tag.CompareTo("Player") != 0 ) return; Destroy( this.gameObject ); }}
将EnemyRocket脚本指定给敌人子弹的Prefab。
在Inspector窗口设置EnemyRocket组件,降低敌人子弹的移动速度,增加生存时间,如图2-29所示。
接下来关联新敌人和子弹,打开SuperEnemy.cs脚本,修改代码如下:
using UnityEngine;using System.Collections;[AddComponentMenu("MyGame/SupperEnemy")]public class SuperEnemy : Enemy { public Transform m_rocket; protected float m_fireTimer = 2; // 控制发射子弹的时间间隔 protected Transform m_player; // 用来指向主角的飞船 public AudioClip m_shootClip; // 播放射击的声音 protected AudioSource m_audio; // 声音源组件,用于播放声音 void Awake() // 继承自MonoBehaviour,它会在游戏体实例化时执行一次,并先于Start方法。 { GameObject obj = GameObject.FindGameObjectWithTag("Player"); // 使用FindGameObjectWithTag函数获得主角游戏体实例 if(obj != null) { m_player = obj.transform; } // m_audio = this.GetComponent<AudioSource>(); }<span style="white-space:pre"></span>// Use this for initialization //void Start () { // 这里一定要注释 Start()函数 <span style="white-space:pre"></span> //}<span style="white-space:pre"></span><span style="white-space:pre"></span>// Update is called once per frame<span style="white-space:pre"></span>protected override void UpdateMove() { m_fireTimer -= Time.deltaTime; if(m_fireTimer <= 0) { m_fireTimer = 2; if(m_player != null) { Vector3 relativePos = m_transform.position - m_player.position; Instantiate(m_rocket,m_transform.position, Quaternion.LookRotation(relativePos)); // 使子弹在初始化的时候,朝向主角的方向 m_audio.PlayOneShot(m_shootClip); // 播放射击声音 } } // 在SuperEnemy这个类中,使用了 override 标识符,表示这是一个重写的方法。 // 虽然SuperEnemy这个类没有其他成员,但它继承了Enemy类的其他全部功能 // 前进 // m_transform.Translate(new Vector3(0, 0, m_speed * Time.deltaTime)); m_transform.Translate(new Vector3(0, 0, -m_speed * Time.deltaTime )); // }}
m_fireTimer属性用来控制发射子弹的时间间隔。
m_player属性用来指向主角的飞船。
Awake方法继承自MonoBehaviour,它会在游戏体实例化时执行一次,并先于Start方法。我们在这里使用FindGameObjectWithTag函数获得主角的游戏体实例。
Quaternion.LookRotation使子弹在初始化时朝向主角的方向。
选择新敌人Prefab,在Inspector窗口选择Rocket属性,与敌人子弹的Prefab关联,如图2-30所示。
0 0
- 2.8.2 发射子弹
- cocos2d-x发射子弹
- unity之子弹发射
- UE4蓝图发射子弹
- Unity发射子弹
- 2d 空物体实例化发射子弹 围绕旋转
- 发射子弹 发射射线判断方法
- cocos2d-x如何发射子弹
- Cocos2d-x--发射多发子弹
- 跳跃的实现(发射子弹)
- (6) cocos2d-x发射子弹
- unity学习之子弹发射
- 子弹朝向屏幕准星发射
- 游戏开发之,发射子弹,中弹后退
- 第四章——如何发射子弹
- unity菜鸟之发射子弹打墙
- Unity3D学习之飞机发射子弹。
- 坦克大战_我方坦克发射子弹
- hdu 1162
- 磁盘映射(Net use)
- 仿oschina 主界面的实现(一) -------FragmentTabHost+Fragment
- 糙米粗粮
- cordova百度导航插件使用
- 2.8.2 发射子弹
- 二维码 zxing
- hdu3586 Information Disturbing(树状DP+二分查找)
- scikit-learn(不常用,仅了解知识点):2.2. Manifold learning(流形学习)
- [LeetCode]Two Sum
- 从HelloWorld开始
- 导演、场景、层、精灵
- topic--script
- ios学习(UIScrollView)