Unity項目 - 撿蘋果 Apple Picker

項目展現

Github項目地址:Apple Pickergit

涉及知識

  • 正投視圖
  • 3D場景內樹與蘋果的圖層
  • 記錄最高分到本地

準備工做

模型製做:github

  1. 基本模型建立
    • 樹葉:sphere 拉伸爲橢圓形,綠色材質球
    • 樹幹:cylinde 修改成合適尺寸,棕色材質球
    • 蘋果:sphere 附加深紅金屬光澤球
    • 籃筐:cube 修改成合適尺寸,黃色材質球
  2. 位置、層級關係
    • 調整樹葉樹幹的位置搭配,呈現簡單樹木形態
    • 另設的空物體AppleTree包含着樹葉和樹幹
  3. 標籤、圖層
    • 新建標籤Apple標記蘋果物體
    • 新建圖層 AppleTree、Apple和Basket,後在Edit->Project Setting->Physics內取消Apple與AppleTree圖層的碰撞。後修正對應物體圖層
  4. 相機及預製體
    • 調整主攝像機爲正投影(Orthographic),移動到合適位置
    • 建立蘋果的預製體

遊戲邏輯

  • 蘋果樹:
    • 每幀都以必定的速度移動,當碰到左右邊界則轉向,且在左右移動過程當中有機率改變運動方向
    • 每必定時間間隔落下一個蘋果
  • 蘋果:
    • 從樹葉位置實例化並落下(本例採用rigidbody重力)
    • 與籃筐產生碰撞即被銷燬
    • 若籃筐未與其碰撞,則當蘋果下落到必定距離就自動銷燬
  • 籃筐:
    • 開局有3個籃筐,且均實例化出來
    • 籃筐跟隨鼠標限制在界面的x軸方向移動
    • 籃筐用於接住蘋果,與蘋果碰撞後銷燬蘋果
    • 當漏接蘋果(也就是當蘋果降低到自行銷燬的底線時),羅筐數減小(至關於玩家的生命值)
  • 機制:
    • 開局,蘋果樹左右移動,生成蘋果下落
    • 玩家操做鼠標使籃筐左右移動
    • 接到蘋果時得分增長,超過歷史分值就刷新記錄
    • 當沒接到蘋果時,籃筐數減小(生命值減小),且場景內還在下落中的蘋果消失
    • 當3個籃筐都沒了,遊戲結束,幾秒後自動從新開局

代碼相關

  • AppleTree.cs:綁定於蘋果樹AppleTree
  • Apple.cs:綁定於蘋果Apple
  • Basket.cs:綁定於籃筐Basket
  • ApplePicker.cs:綁定於主攝像機;BasketPrefab 掛載Basket,EndUI 掛載Canvas->End
  • HighScore.cs:綁定於 Canvas->HighScore

問題探討

蘋果樹移動時機率轉向問題:app

  • 問題分析:在AppleTree.cs內,原計劃實現每秒轉向機率爲chanceToChangeDirecyions=0.02(以下原版代碼),可是發現,在FixedUpdate()內,每秒執行50次,也就會致使AppleTree平均每秒改變一次方向:(設機率爲t) 50 x (t/1) = 1 ,所以須要修改。
  • 解決方案:對隨機數Random.value進行修改,即 Random.value/Time.deltaTime,此時每秒轉向機率爲: 50 x (t / (1/0.02)) = 50 x 0.02(t/1) = 0.02 ,至此解決問題
  • 其餘:但試驗下來0.02機率太低,我已調爲0.4,且速度爲5
private void FixedUpdate()
{
    /*-----原版-----*/
    //隨機改變運動方向,機率爲 chanceToChangeDirecyions
    if ((Random.value) < chanceToChangeDirecyions)
        speed *= -1;

    /*-----修正版-----*/
    if ((Random.value / Time.deltaTime) < chanceToChangeDirecyions)
        speed *= -1;
}

蘋果下落被銷燬就再也不生成問題:dom

  • 問題分析:當第二個蘋果還未實例化,第一個實例化的蘋果就因降低越線被銷燬或者被籃筐接住銷燬,此刻場景內就再無Apple預製體,也就是說,AppleTree腳本 就失去對象applePrefab,沒法再實例化產生蘋果
  • 解決方案:圍繞保證場景內任意時刻存在一個applePrefab
    • 調高樹的高度(本例方案)
    • 縮短實例化蘋果的間隔
    • 先隱藏再延時銷燬蘋果(理論可行,但感受大材小用)

參考

相關文章
相關標籤/搜索