12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 3940|回复: 12
打印 上一主题 下一主题

Unity3D编写雷电游戏(四)

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

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

跳转到指定楼层
楼主
发表于 2012-1-17 15:14:38 |只看该作者 |倒序浏览
现在子弹出来了,但是我们没有加上子弹的消亡,这样子弹被创建出来后就一直存在于场景中不会消失,会越积越多,所以我们让子弹在移出屏幕时就把他销毁掉。
using UnityEngine;
using System.Collections;
public class BulletControl : MonoBehaviour {

    // Use this for initialization
    void Start () {
   
    }
   
    // Update is called once per frame
    void Update () {   
        Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
            //print(screenPos.y);
        if (Screen.height < screenPos.y)
            Destroy(transform.gameObject);
    }
}
将这个脚本挂接在子弹的prefab上就可以实现效果了。
己方的飞机控制已经初步完成了,现在要加入敌机了。
理论上应该有两种方式:
1.预先设定,就是在编辑器里在你想要的位置上加上敌方的攻击单位
2.动态生成,根据游戏进行的时间来控制敌方攻击单位的产生。
这边采用第2个方式来产生,有一些地面单位倒是可以用第一种方式来产生。
我们首先要设置一个敌机的产生位置,用空的object可以随意的定一个坐标。
using UnityEngine;
using System.Collections;

public class EnemyManager : MonoBehaviour {
   
    public GameObject m_EnemyPre;
    public Transform m_CreatePoint;
   
    //一波飞机的数量
    public const int MAX_GROUP_ENEMYS = 4;
    //两波飞机之间的时间间隔
    public float GROUP_INTERVAL = 2.0f;
    //同一波中两架飞机之间产生的间隔
    public float CREATE_INTERVAL = 0.25f;
   
    private float m_fTimeAfterOneGroup = 0.0f;
    private float m_fTimeAfterCreate = 0.0f;
    private int m_nEnemyNum = 0;
    // Use this for initialization
    void Start ()
    {
   
    }
   
    // Update is called once per frame
    void Update ()
    {
        m_fTimeAfterOneGroup +=Time.deltaTime;
        m_fTimeAfterCreate += Time.deltaTime;
      
        if (m_fTimeAfterOneGroup > 2.0f)
        {
            if (m_fTimeAfterCreate > 0.25f)
            {
                GameObject clone = (GameObject)Instantiate(m_EnemyPre,
                                    m_CreatePoint.position, m_CreatePoint.rotation);
               
                clone.AddComponent("MoveScript_Shake");
                m_nEnemyNum +=1;
                m_fTimeAfterCreate = 0;
            }
           
            if (m_nEnemyNum == MAX_GROUP_ENEMYS)
            {
                m_fTimeAfterOneGroup = 0.0f;
                m_nEnemyNum = 0;
            }
        }
    }
}

敌机的移动脚本,可自己再定义新的移动脚本,在创建新敌机时挂上去就好:
using UnityEngine;
using System.Collections;
public class MoveScript_Shake : MonoBehaviour {
    //标志左右移动方向
    private int m_nDir = 1;
    //原始位置
    private Vector3 m_OriginalPos;
    //水平移动速度
    public float m_HoriSpeed = 0.1f;
    //翻转速度
    public float m_RotSpeed = 1.0f;
    //向前移动速度
    public float m_MoveSpeed = 0.0005f;
   
    public Vector3 curScreenPos;
   
    public Vector3 LDPoint;

    // Use this for initialization
    void Start ()
    {
        m_OriginalPos = transform.position;
        LDPoint = GameObject.Find("LDPoint").transform.position;
        print (LDPoint);
    }
   
    // Update is called once per frame
    void Update ()
    {
        float relativeOffset = transform.position.x - m_OriginalPos.x;
      
        if (Mathf.Abs(relativeOffset) > 5)
        {
            m_nDir = -m_nDir;
        }
      
        transform.Translate(new Vector3(m_nDir * m_HoriSpeed, 0, m_MoveSpeed));
      
        Transform planeTrans = transform.GetChild(0).transform;
        planeTrans.Rotate(0.0f, 0.0f, -m_nDir * m_RotSpeed);
        //出屏则消除
//        curScreenPos = Camera.mainCamera.WorldToScreenPoint(transform.position);
        //print("Cur:"+curScreenPos);
        if (transform.position.z < Camera.mainCamera.transform.position.z - 10)
        {
            Destroy(this.gameObject);
        }
//        print("Cur:"+transform.position);
//        if (transform.position.z < LDPoint.z)
//        {
//            Destroy(this.gameObject);
//        }
    }
}
实现效果:

原来那个用unity3d自带的火焰老改不出想要的效果,去看了一个教程,调出一个还好的感觉。




         

         
最后的效果是:









本文转自:http://www.cnblogs.com/gameprogram/



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

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

沙发
发表于 2012-2-5 23:29:14 |只看该作者
再看一看,再顶楼主
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

板凳
发表于 2012-3-19 23:26:09 |只看该作者
赞一个,哈哈
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

地板
发表于 2012-4-30 23:18:34 |只看该作者
心中有爱,爱咋咋地
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

5#
发表于 2012-5-1 23:20:02 |只看该作者
有意思!学习了!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

6#
发表于 2012-7-27 23:24:46 |只看该作者
顶!学习了!阅!
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

7#
发表于 2012-7-31 23:24:55 |只看该作者
呵呵,真得不错哦!!
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

8#
发表于 2012-8-18 23:41:03 |只看该作者
俺是新人,这厢有礼了!
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

9#
发表于 2012-8-19 23:44:55 |只看该作者
跑着去顶朋友滴铁
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

10#
发表于 2012-9-1 01:06:13 |只看该作者
俺是新人,这厢有礼了!
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

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

GMT+8, 2024-11-23 17:20 , Processed in 0.122177 second(s), 32 queries .

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

© 2008-2019 Narkii Inc.

回顶部