Unity3D編寫雷電游戲_第1頁(yè)
Unity3D編寫雷電游戲_第2頁(yè)
Unity3D編寫雷電游戲_第3頁(yè)
Unity3D編寫雷電游戲_第4頁(yè)
Unity3D編寫雷電游戲_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基礎(chǔ)實(shí)用的一篇經(jīng)驗(yàn)教程!一、搭建游戲的框架。一般的游戲都可以分為四個(gè)場(chǎng)景:1.開始界面2.游戲場(chǎng)景3.暫停界面4.結(jié)束界面開始界面,就是存放開始菜單的地方了,游戲場(chǎng)景就是游戲的主場(chǎng)景,游戲的主要元素都在這邊體現(xiàn),暫停和結(jié)束畫面我就不多說了。更多的還有在開始和主游戲場(chǎng)景之間加入過場(chǎng)動(dòng)畫等等。當(dāng)然你也可以在暫停界面中插入廣告我們會(huì)發(fā)現(xiàn)這幾個(gè)場(chǎng)景之間其實(shí)就是切換來切換去的關(guān)系。如果知道設(shè)計(jì)模式中的State模式,就會(huì)發(fā)現(xiàn)跟這個(gè)很象。可以通過State模式來實(shí)現(xiàn)這幾個(gè)場(chǎng)景的分離,然后分邊為他們添加不同的元素。想要掛接在Unity3D中的結(jié)點(diǎn)的腳本都得繼承MonoBehaviour,State就是所有的

2、狀態(tài)的父類了,主要是三個(gè)函數(shù),Init()用于這個(gè)狀態(tài)的初始化,Update用于場(chǎng)景的更新,Exit()用于當(dāng)離開當(dāng)前狀態(tài)時(shí)所進(jìn)行的一些操作,比如隱藏當(dāng)前界面等。創(chuàng)建一個(gè)空的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();這樣我們就可以輕松的在不同的狀態(tài)中切換了。想要增加一個(gè)新的狀態(tài),就只需繼承State類,然后在其中寫這個(gè)狀態(tài)所要的元素,在適當(dāng)?shù)牡胤紺hangeState一下就好了。腳本的層次結(jié)構(gòu)如下:推薦精選例如我在按鈕按下時(shí)切換到開始場(chǎng)景: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);這個(gè)腳本

5、是掛在一個(gè)板上面的,點(diǎn)擊它時(shí)就進(jìn)入游戲的主場(chǎng)景了。下回說一下飛機(jī)的移動(dòng)?,F(xiàn)在開始真正的游戲元素的編寫了。第一步,讓飛機(jī)動(dòng)起來。首先是飛機(jī)的前進(jìn),通常2D中的做就是背景的循環(huán)滾動(dòng)。在3D中我們可以讓攝像機(jī)移動(dòng),背景我們可以做超一個(gè)大地形。在地形上擺一些固定的東西。/ 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);/向左轉(zhuǎn)if (CurRotation screenPos.x)this.transform.T

8、ranslate(Vector3.left * Time.deltaTime * -m_nMoveSpeed);/向右轉(zhuǎn)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記錄子彈發(fā)射后的時(shí)間,然后在大于時(shí)間間隔后才能發(fā)射下一個(gè)子彈。武器父類:using UnityEngine;using System.Collections;using System;public class Weapon : MonoBehaviour /子彈時(shí)間間隔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.v

12、elocity = transform.TransformDirection(Vector3.forward * 20);m_FirePoint是一個(gè)數(shù)組,存儲(chǔ)了發(fā)射子彈的位置。在編輯器中,可以在飛機(jī)周圍用空的GameObject放置一系列炮口的位置,然后拖入這個(gè)數(shù)組中。MAX_FP定義了炮口的數(shù)量。這里邊用到了速度屬性,這個(gè)是rigidbody才有的,所以在設(shè)置子彈的prefab時(shí)一定要為它加上rigidbody才行。推薦精選結(jié)構(gòu)如下圖所示:最后的效果圖:現(xiàn)在子彈出來了,但是我們沒有加上子彈的消亡,這樣子彈被創(chuàng)建出來后就一直存在于場(chǎng)景中不會(huì)消失,會(huì)越積越多,所以我們讓子彈在移出屏幕時(shí)就把他銷

13、毀掉。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.hei

14、ght 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;敵

15、機(jī)的移動(dòng)腳本,可自己再定義新的移動(dòng)腳本,在創(chuàng)建新敵機(jī)時(shí)掛上去就好:using UnityEngine;using System.Collections;public class MoveScript_Shake : MonoBehaviour /標(biāo)志左右移動(dòng)方向private int m_nDir = 1;/原始位置private Vector3 m_OriginalPos;推薦精選/水平移動(dòng)速度public float m_HoriSpeed = 0.1f;/翻轉(zhuǎn)速度public float m_RotSpeed = 1.0f;/向前移動(dòng)速度public float m_MoveSpeed

16、= 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

17、 - 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 Ca

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論