Unity3D實現(xiàn)經(jīng)典小游戲Pacman_第1頁
Unity3D實現(xiàn)經(jīng)典小游戲Pacman_第2頁
Unity3D實現(xiàn)經(jīng)典小游戲Pacman_第3頁
Unity3D實現(xiàn)經(jīng)典小游戲Pacman_第4頁
Unity3D實現(xiàn)經(jīng)典小游戲Pacman_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第Unity3D實現(xiàn)經(jīng)典小游戲Pacman目錄項目概況整體布局地圖介紹玩法介紹相關知識版本說明項目源碼

項目概況

整體布局

地圖介紹

除了音效,游戲地圖上的元素有:

普通糖豆(玩家通過移動,經(jīng)過的普通糖豆會被吃掉,獲得積分)

特殊糖豆(玩家吃到后,可以讓所有敵方停止移動,產(chǎn)生幻影效果)

隔離墻(相當于迷宮的墻,在兩堵墻之間的間隙才能移動)

剩余游戲時間Remain(共設300s,時間一到,游戲結束)

截止到現(xiàn)在花費的游戲時間Now(設在0~300之間)

截止到目前為止的游戲得分Score(越高越好)

敵方人機(分為四種顏色區(qū)分,小橙、小粉、小藍、小紅)

我方玩家(小黃,游戲的主體之一)

玩法介紹

玩法(輸贏的判斷):

盡量在所設時限內吃完所有的糖豆并且未被敵方人機碰到。

如果都吃完了,用時少的更佳;

如果都沒吃完,相同時間內得分高者更佳。

吃到特殊糖豆(大糖豆),可以讓所有敵方停止移動,產(chǎn)生幻影效果,相當于無敵效果的反作用,使自己在某段時間內不會被攻擊,延長了玩家的存活時間,可以通過概率設計更改玩家的存活率。

相關知識

在學習的過程中,幾個比較重要的知識點就是:預制體、克隆體、精靈渲染器、渲染層級、腳本、碰撞檢測、觸發(fā)檢測、AI設計、UI設計、固定物理幀...

版本說明

小蝦采用的是Unity一個較新的版本-2025.1.16,這里建議小伙伴們下載和教程相同版本的,不然真的會有可能遇到卡點消耗心情哈。

可以和我一樣在UnityHub里面安裝,Hub感覺挺好用的。

項目源碼

玩家的移動(PacmanMove.cs)

usingUnityEngine;

publicclassPacmanMove:MonoBehaviour

//吃豆人的移動速度

publicfloatspeed=0.35f;

//吃豆人下一次移動將要去的目的地

privateVector2dest=Vector2.zero;

privatevoidStart()

//保證吃豆人在游戲剛開始的時候不會動

dest=transform.position;

privatevoidFixedUpdate()

//插值得到要移動到dest位置的下一次移動坐標

Vector2temp=Vector2.MoveTowards(transform.position,dest,speed);//隨著幀的每次調用,不斷向右移動取中間值

//通過剛體來設置物體的位置

GetComponentRigidbody2D().MovePosition(temp);

//必須先達到上一個dest的位置才可以發(fā)出新的目的地設置指令

if((Vector2)transform.position==dest)

if((Input.GetKey(KeyCode.UpArrow)||Input.GetKey(KeyCode.W))Valid(Vector2.up))

dest=(Vector2)transform.position+Vector2.up;

if((Input.GetKey(KeyCode.DownArrow)||Input.GetKey(KeyCode.S))Valid(Vector2.down))

dest=(Vector2)transform.position+Vector2.down;

if((Input.GetKey(KeyCode.LeftArrow)||Input.GetKey(KeyCode.A))Valid(Vector2.left))

dest=(Vector2)transform.position+Vector2.left;

if((Input.GetKey(KeyCode.RightArrow)||Input.GetKey(KeyCode.D))Valid(Vector2.right))

dest=(Vector2)transform.position+Vector2.right;

//獲取移動方向

Vector2dir=dest-(Vector2)transform.position;

//把獲取到的移動方向設置給動畫狀態(tài)機

GetComponentAnimator().SetFloat("DirX",dir.x);

GetComponentAnimator().SetFloat("DirY",dir.y);

//檢測將要去的位置是否可以到達

privateboolValid(Vector2dir)

//記錄下當前位置

Vector2pos=transform.position;

//從將要到達的位置向當前位置發(fā)射一條射線,并儲存下射線信息

RaycastHit2Dhit=Physics2D.Linecast(pos+dir,pos);

//返回此射線是否打到了吃豆人自身上的碰撞器

return(hit.collider==GetComponentCollider2D

}

糖豆設計(Pacdot.cs)

usingUnityEngine;

publicclassPacdot:MonoBehaviour

publicboolisSuperPacdot=false;

privatevoidOnTriggerEnter2D(Collider2Dcollision)

if(collision.gameO=="Pacman")

if(isSuperPacdot)

GameManager.Instance.OnEatPacdot(gameObject);

GameManager.Instance.OnEatSuperPacdot();

Destroy(gameObject);

else

GameManager.Instance.OnEatPacdot(gameObject);

Destroy(gameObject);

}

敵方人機的移動(GhostMove)

usingSystem.Collections.Generic;

usingUnityEngine;

usingUnityEngine.SceneManagement;

publicclassGhostMove:MonoBehaviour

publicGameObject[]wayPointsGos;

publicfloatspeed=0.2f;

privateListVector3wayPoints=newListVector3

privateintindex=0;

privateVector3startPos;

privatevoidStart()

startPos=transform.position+newVector3(0,3,0);

LoadAPath(wayPointsGos[GameManager.Instance.usingIndex[GetComponentSpriteRenderer().sortingOrder-2]]);

privatevoidFixedUpdate()

if(transform.position!=wayPoints[index])

Vector2temp=Vector2.MoveTowards(transform.position,wayPoints[index],speed);

GetComponentRigidbody2D().MovePosition(temp);

else

index++;

if(index=wayPoints.Count)

index=0;

LoadAPath(wayPointsGos[Random.Range(0,wayPointsGos.Length)]);

Vector2dir=wayPoints[index]-transform.position;

GetComponentAnimator().SetFloat("DirX",dir.x);

GetComponentAnimator().SetFloat("DirY",dir.y);

privatevoidLoadAPath(GameObjectgo)

wayPoints.Clear();

foreach(Transformtingo.transform)

wayPoints.Add(t.position);

wayPoints.Insert(0,startPos);

wayPoints.Add(startPos);

privatevoidOnTriggerEnter2D(Collider2Dcollision)

if(collision.gameO=="Pacman")

if(GameManager.Instance.isSuperPacman)

transform.position=startPos-newVector3(0,3,0);

index=0;

GameManager.Instance.score+=500;

else

colli

溫馨提示

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

最新文檔

評論

0/150

提交評論