纳金网

标题: Unity3D编写雷电游戏(二) [打印本页]

作者: 会飞的鱼    时间: 2012-1-17 14:55
标题: Unity3D编写雷电游戏(二)
脚本的层次结构如下:

例如我在按钮按下时切换到开始场景:
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模式差不多。

作者: 菜刀吻电线    时间: 2012-2-22 23:20
不错 非常经典  实用

作者: 晃晃    时间: 2012-5-13 23:21
好`我顶``顶顶

作者: 菜刀吻电线    时间: 2012-7-24 23:26
我看看就走,你们聊!

作者: 菜刀吻电线    时间: 2012-8-18 00:04
加精、加亮滴铁子,尤其要多丁页丁页

作者: 晃晃    时间: 2012-10-1 23:23
真不错,全存下来了.

作者: C.R.CAN    时间: 2013-3-17 23:31
无聊时可以刷屏幕 灌水 也可以试试 帖子的标题究竟可以写多长





欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5