查看: 2409|回复: 6
打印 上一主题 下一主题

Unity3D编写雷电游戏(三)

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-1-17 15:06:11 |只看该作者 |倒序浏览






Weapon类是所有武器的基类,新的武器继承于它,设置发射点,子弹模型,然后实现Fire函数就可以了。
WeaponManager用于管理所有武器,切换武器。

using UnityEngine;
using System.Collections;

public class WeaponManager : MonoBehaviour {
   
    public Weapon m_CurWeapon;
    private float m_FireElapseTime = 0;

    // Use this for initialization
    void Start () {
   
    }
   
    // Update is called once per frame
    void Update () {
      
        m_FireElapseTime += Time.deltaTime;
        if (Input.GetKey(KeyCode.Space))
        {
            if ( m_FireElapseTime > m_CurWeapon.GetBulletInterval())
            {
                m_CurWeapon.Fire();
                m_FireElapseTime = 0;
            }
            else
            {

            }
        }
    }
}
记录子弹发射后的时间,然后在大于时间间隔后才能发射下一个子弹。
武器父类:
using UnityEngine;
using System.Collections;
using System;

public class Weapon : MonoBehaviour {
   
    //子弹时间间隔
    protected float m_fBulletInterval = 0;
    //子弹类型
    public String m_typeName ="";
   
    public float GetBulletInterval()
    {
        return m_fBulletInterval;
    }

    // Use this for initialization
    void Start () {
   
    }
   
    // Update is called once per frame
    void Update () {
   
    }
   
    public virtual void Fire()
    {
      
    }
}

最基本的一种子弹:
using UnityEngine;
using System.Collections;

public class WeaponNormal : Weapon {
   
    private const int MAX_FP = 2;
    public Transform[] m_FirePoint = new Transform[MAX_FP];
    public Rigidbody m_BulletPre;
   
    WeaponNormal()
    {
        m_fBulletInterval = 2;
        m_typeName = "Normal";
    }
   
    // Use this for initialization
    void Start () {
   
    }
   
    // Update is called once per frame
    void Update () {
   
    }
   
    public override void Fire()
    {
        for(int i = 0; i < MAX_FP; i++)
        {
            Rigidbody clone = (Rigidbody)Instantiate(m_BulletPre, m_FirePoint.position,
                        m_FirePoint.rotation);
           
            clone.velocity = transform.TransformDirection(Vector3.forward * 20);
        }
    }
}
m_FirePoint是一个数组,存储了发射子弹的位置。在编辑器中,可以在飞机周围用空的GameObject放置一系列炮口的位置,然后拖入这个数组中。MAX_FP定义了炮口的数量。这里边用到了速度属性,这个是rigidbody才有的,所以在设置子弹的prefab时一定要为它加上rigidbody才行。
结构如下图所示:



最后的效果图:


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

沙发
发表于 2012-4-6 23:21:34 |只看该作者
赞一个,哈哈
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-5-6 23:26:14 |只看该作者
我也来支持下
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

地板
发表于 2012-5-26 23:20:48 |只看该作者
先垫一块,再说鸟
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-6-7 23:19:16 |只看该作者
非常感谢,管理员设置了需要对新回复进行审核,您的帖子通过审核后将被显示出来,现在将转入主题
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2012-10-15 23:26:03 |只看该作者
加精、加亮滴铁子,尤其要多丁页丁页
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2012-10-22 23:30:12 |只看该作者
已阵亡的 蝶 随 风 舞 说过  偶尔按一下 CTRL A 会发现 世界还有另一面
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-19 00:36 , Processed in 0.100831 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部