Unity3D编写雷电游戏

上传人:pu****.1 文档编号:488009985 上传时间:2024-01-04 格式:DOC 页数:20 大小:2.13MB
返回 下载 相关 举报
Unity3D编写雷电游戏_第1页
第1页 / 共20页
Unity3D编写雷电游戏_第2页
第2页 / 共20页
Unity3D编写雷电游戏_第3页
第3页 / 共20页
Unity3D编写雷电游戏_第4页
第4页 / 共20页
Unity3D编写雷电游戏_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《Unity3D编写雷电游戏》由会员分享,可在线阅读,更多相关《Unity3D编写雷电游戏(20页珍藏版)》请在金锄头文库上搜索。

1、基础实用的一篇经验教程!一、搭建游戏的框架。一般的游戏都可以分为四个场景:1.开始界面2.游戏场景3.暂停界面4.结束界面开始界面,就是存放开始菜单的地方了,游戏场景就是游戏的主场景,游戏的主要元素都在这边体现,暂停和结束画面我就不多说了。更多的还有在开始和主游戏场景之间加入过场动画等等。当然你也可以在暂停界面中插入广告我们会发现这几个场景之间其实就是切换来切换去的关系。如果知道设计模式中的State模式,就会发现跟这个很象。可以通过State模式来实现这几个场景的分离,然后分边为他们添加不同的元素。想要挂接在Unity3D中的结点的脚本都得继承MonoBehaviour,State就是所有的

2、状态的父类了,主要是三个函数,Init()用于这个状态的初始化,Update用于场景的更新,Exit()用于当离开当前状态时所进行的一些操作,比如隐藏当前界面等。创建一个空的Object用来挂接我们游戏的主脚本,代码如下:using UnityEngine;using System.Collections;推荐精选public class Main_Script : MonoBehaviour public State m_CurState;public void ChangeState(State newState)m_CurState.Exit();m_CurState = newStat

3、e;m_CurState.Init();/ Use this for initializationvoid Start () m_CurState.Init();/ Update is called once per framevoid Update () m_CurState.Update();这样我们就可以轻松的在不同的状态中切换了。想要增加一个新的状态,就只需继承State类,然后在其中写这个状态所要的元素,在适当的地方ChangeState一下就好了。脚本的层次结构如下:推荐精选例如我在按钮按下时切换到开始场景:using System.Collections;public class

4、 BeginGame : MonoBehaviour public StateRun m_RunState;public Main_Script m_MainScript;/ Use this for initializationvoid Start () / Update is called once per framevoid Update () void OnMouseEnter()print(enter);推荐精选void OnMouseUp()m_MainScript.ChangeState(m_RunState);void OnMouseExit()print(exit);这个脚本

5、是挂在一个板上面的,点击它时就进入游戏的主场景了。下回说一下飞机的移动。现在开始真正的游戏元素的编写了。第一步,让飞机动起来。首先是飞机的前进,通常2D中的做就是背景的循环滚动。在3D中我们可以让摄像机移动,背景我们可以做超一个大地形。在地形上摆一些固定的东西。/ Update is called once per framevoid Update () TurnLeft = false;TurnRight = false;if (Input.GetKey(KeyCode.W) Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(t

6、his.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.Transl

7、ate(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 screenPos.x)this.transform.T

8、ranslate(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 m_CurWeapon.GetBulletInterval()推荐精选m_CurWeapon.Fire();m_FireElapseTime

9、 = 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 initializa

10、tionvoid Start () / Update is called once per framevoid 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 TransformMAX_FP;public Rigidbody m_BulletPre;WeaponNormal

11、()m_fBulletInterval = 2;m_typeName = Normal;推荐精选/ Use this for initializationvoid Start () / Update is called once per framevoid Update () public override void Fire()for(int i = 0; i MAX_FP; i+)Rigidbody clone = (Rigidbody)Instantiate(m_BulletPre, m_FirePointi.position,m_FirePointi.rotation);clone.velocity = transform.TransformDirection(Vector3.forwar

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号