




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习资料收集于网络,仅供参考基础实用的一篇经验教程!一、搭建游戏的框架。一般的游戏都可以分为四个场景:1.开始界面2.游戏场景3.暂停界面4.结束界面开始界面,就是存放开始菜单的地方了,游戏场景就是游戏的主场景,游戏的主要元素都在这边体现,暂停和结束画面我就不多说了。更多的还有在开始和主游戏场景之间加入过场动画等等。当然你也可以在暂停界面中插入广告我们会发现这几个场景之间其实就是切换来切换去的关系。如果知道设计模式中的State模式,就会发现跟这个很象。可以通过State模式来实现这几个场景的分离,然后分边为他们添加不同的元素。想要挂接在Unity3D中的结点的脚本都得继承MonoBehaviour,State就是所有的状态的父类了,主要是三个函数,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 = newState;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 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);这个脚本是挂在一个板上面的,点击它时就进入游戏的主场景了。下回说一下飞机的移动。现在开始真正的游戏元素的编写了。第一步,让飞机动起来。首先是飞机的前进,通常2D中的做就是背景的循环滚动。在3D中我们可以让摄像机移动,背景我们可以做超一个大地形。在地形上摆一些固定的东西。/ Update is called once per framevoid 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 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 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 initializationvoid 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()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.forward * 20);m_FirePoint是一个数组,存储了发射子弹的位置。在编辑器中,可以在飞机周围用空的GameObject放置一系列炮口的位置,然后拖入这个数组中。MAX_FP定义了炮口的数量。这里边用到了速度属性,这个是rigidbody才有的,所以在设置子弹的prefab时一定要为它加上rigidbody才行。结构如下图所示:最后的效果图:现在子弹出来了,但是我们没有加上子弹的消亡,这样子弹被创建出来后就一直存在于场景中不会消失,会越积越多,所以我们让子弹在移出屏幕时就把他销毁掉。using UnityEngine;using System.Collections;public class BulletControl : MonoBehaviour / Use this for initializationvoid Start () / Update is called once per framevoid Update () Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);/print(screenPos.y);if (Screen.height 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 initializationvoid Start () m_OriginalPos = transform.position;LDPoint = GameObject.Find(LDPoint).transform.position;print (LDPoint);/ Update is called once per framevoid 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 C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合作式学习在高职专业英语课堂中的应用与革新
- 节气课程课件
- 应激相关障碍(一)
- 2025内蒙古呼伦贝尔农垦莫拐农牧场有限公司招聘16人笔试备考及1套参考答案详解
- 教师招聘之《小学教师招聘》考前冲刺测试卷含答案详解(突破训练)
- 教师招聘之《小学教师招聘》通关训练试卷详解附参考答案详解【研优卷】
- 教师招聘之《幼儿教师招聘》综合提升测试卷附参考答案详解(基础题)
- 教师招聘之《小学教师招聘》考前冲刺测试卷讲解及1套完整答案详解
- 教师招聘之《幼儿教师招聘》考试综合练习含答案详解【基础题】
- 基于2025年物联网的智能仓储风险管理体系研究报告
- GB/T 8948-1994聚氯乙烯人造革
- GB/T 6482-2007凿岩用螺纹连接钎杆
- 小学英语人教PEP六年级上册Unit3Myweekendplan击鼓传花小游戏
- PEP小学英语单词表(3-6年级)
- 2020小学一年级语文上册新教材教材分析解读课件
- DB4401-T 43-2020 反恐怖防范管理+防冲撞设施-(高清现行)
- 教学课件:《新能源材料技术》朱继平
- 专业技术职称与职业(工种)技能人才评价对应表(试行)
- DB37∕T 4328-2021 建筑消防设施维护保养技术规程
- 银行信贷实务与管理课件
- 实习任务书(标准模版)
评论
0/150
提交评论