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

Unity3D编写雷电游戏(二)

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

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

跳转到指定楼层
楼主
发表于 2012-1-17 14:55:27 |只看该作者 |倒序浏览
脚本的层次结构如下:

例如我在按钮按下时切换到开始场景:
using System.Collections;
public class BeginGame : MonoBehaviour {
   
    public StateRun m_RunState;
    public Main_Script m_MainScript;

    // Use this for initialization
    void Start () {
    }
    // Update is called once per frame
    void Update () {
    }
    void OnMouseEnter()
    {
        print("enter");
    }
    void OnMouseUp()
    {
        m_MainScript.ChangeState(m_RunState);
    }
   
    void OnMouseExit()
    {
        print("exit");
    }
}
这个脚本是挂在一个板上面的,点击它时就进入游戏的主场景了。下回说一下飞机的移动。
现在开始真正的游戏元素的编写了。
第一步,让飞机动起来。
首先是飞机的前进,通常2D中的做就是背景的循环滚动。
在3D中我们可以让摄像机移动,背景我们可以做超一个大地形。。在地形上摆一些固定的东西。
    // Update is called once per frame
    void Update () {
      
        TurnLeft = false;
        TurnRight = false;

        if (Input.GetKey(KeyCode.W))
        {      
            Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
            //print(screenPos.y);
            if (Screen.height > screenPos.y)
                this.transform.Translate(Vector3.forward * Time.deltaTime * m_nMoveSpeed);
        }
        if (Input.GetKey(KeyCode.S))
        {
            Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
            if (0 < screenPos.y)
                this.transform.Translate(Vector3.forward * Time.deltaTime * -m_nMoveSpeed);
        }
      
        if (Input.GetKey(KeyCode.A))
        {
            Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
            if (0 < screenPos.x)
                this.transform.Translate(Vector3.left * Time.deltaTime * m_nMoveSpeed);
            //向左转
            if (CurRotation < RotateLimit)
            {
                print(CurRotation);
                CurRotation += RotateSpeed;
            }
            TurnLeft = true;
        }
        if (Input.GetKey(KeyCode.D))
        {
            Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
            if (Screen.width > screenPos.x)
                this.transform.Translate(Vector3.left * Time.deltaTime * -m_nMoveSpeed);
            //向右转
            if (CurRotation > -RotateLimit)
                CurRotation -= RotateSpeed;
            TurnRight = true;
        }
        //回归
        if (!TurnLeft && !TurnRight)
        {
            if (CurRotation > 0.0)
                CurRotation -=RotateSpeed;
            else if (CurRotation < 0)
                CurRotation +=RotateSpeed;
        }
        Quaternion rot = Quaternion.AngleAxis(CurRotation, new Vector3(0, 0, 1));
        m_Plane.rotation = rot;     
        //让相机和飞机一起以一定的速度前移
        this.transform.Translate(Vector3.forward * Time.deltaTime * m_nMoveSpeed);
        Camera.mainCamera.transform.Translate(Vector3.up * Time.deltaTime * m_nMoveSpeed);
   
    }
飞机的主要控制代码。。不知为什么,我的两个角度限制没有效果。。郁闷。。有空还看一下。。




这次先加入子弹的发射吧,没用模型,先用的一个capsule的prefab代替吧。
一想到各种武器之间的随意切换,就不由的想到了设计模式中的Strategy模式。
有关策略模式的详细介绍可以通过百度和维基来学习。
这个模式其实和State模式差不多。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

沙发
发表于 2012-2-22 23:20:34 |只看该作者
不错 非常经典  实用
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

板凳
发表于 2012-5-13 23:21:00 |只看该作者
好`我顶``顶顶
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

地板
发表于 2012-7-24 23:26:36 |只看该作者
我看看就走,你们聊!
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

5#
发表于 2012-8-18 00:04:35 |只看该作者
加精、加亮滴铁子,尤其要多丁页丁页
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

6#
发表于 2012-10-1 23:23:14 |只看该作者
真不错,全存下来了.
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

7#
发表于 2013-3-17 23:31:44 |只看该作者
无聊时可以刷屏幕 灌水 也可以试试 帖子的标题究竟可以写多长
回复

使用道具 举报

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

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-20 16:59 , Processed in 0.090826 second(s), 33 queries .

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

© 2008-2019 Narkii Inc.

回顶部