首頁 > 科技週邊 > IT業界 > 建立UI和遊戲玩法的乒乓球克隆

建立UI和遊戲玩法的乒乓球克隆

Lisa Kudrow
發布: 2025-02-19 11:30:13
原創
842 人瀏覽過

>本教程增強了建立在團結的基本基本克隆,添加了經典的兩個美學,改進的遊戲機制和復古風格的UI。 讓我們升級我們的乒乓球!

>

第2部分:Retro Revamp&Enhanced Gameplay

>

>本教程建立在先前的乒乓球上。 從Github下載項目或在繼續之前完成第1部分。 還可以使用工作的演示和最終改進的遊戲。

>

密鑰改進:

  • 經典樣式:進口黑色和白色精靈,對真實復古視覺效果調整單位像素(至64)。將主攝像頭背景更改為黑色,並相應地更新槳和球精靈。使用多個縮放的白色精靈創建一個中央分隔線。
  • 增強的碰撞:完善球碰撞處理以計算槳的衝擊角度,從而使彈跳更加現實。 這涉及更新BallController腳本的OnCollisionEnter2D方法以使用launchAngle>函數。請記住適當地標記玩家和敵人槳。
  • 改善了敵人的AI:使用基於時間的計算,增強響應能力和挑戰。修改腳本以使用EnemyController,調整速度和時機以獲得最佳平滑度。 添加邊界以防止AI槳在屏幕上脫離。 InvokeRepeating("Move", .02F, .02F)腳本應在銷毀球後重置敵方槳的位置。 BoundsController
  • 復古暫停菜單:
  • 使用自定義像素字體(如絲線屏幕)創建暫停菜單。包括具有適當功能的“重置”和“主菜單”按鈕。 >腳本管理暫停和恢復,並顯示/隱藏暫停菜單元素。 確保用“ Showonpause”標記暫停菜單元素。 > UIManager>
  • >動態主菜單:
  • 在後台設計帶有模擬AI遊戲的主菜單。 複製主遊戲場景,刪除不必要的元素,並添加標題和“播放”按鈕。使用>和腳本(類似於敵人AI,但對速度和時機進行調整)來控制主菜單中的AI槳。 AutoPlayer> AutoEnemy評分系統:
  • 實現一個跟踪播放器和AI得分的評分系統,在UI上顯示它們(使用腳本),並在得分限制時結束遊戲(例如,7分達到),在屏幕上顯示遊戲。
  • >腳本顯示獲勝者。 切記用“ showonfinish”元素標記遊戲。 PointCounterGameOver

代碼片段:Building a Pong Clone in Unity: UI and Gameplay

(ballcontroller.cs- oncollisionEnter2d&啟動angle)

void OnCollisionEnter2D(Collision2D col) {
    if (col.gameObject.tag == "Enemy") {
        float y = launchAngle(transform.position, col.transform.position, col.collider.bounds.size.y);
        Vector2 d = new Vector2(1, y).normalized;
        rig2D.velocity = d * speed * 1.5F;
    }
    if (col.gameObject.tag == "Player") {
        float y = launchAngle(transform.position, col.transform.position, col.collider.bounds.size.y);
        Vector2 d = new Vector2(-1, y).normalized;
        rig2D.velocity = d * speed * 1.5F;
    }
}

float launchAngle(Vector2 ball, Vector2 paddle, float paddleHeight) {
    return (ball.y - paddle.y) / paddleHeight;
}
登入後複製

(eneycontroller.cs-移動)

void Move() {
    if (ball == null) {
        ball = GameObject.FindGameObjectWithTag("Ball").transform;
    }
    ballRig2D = ball.GetComponent<Rigidbody2D>();
    if (ballRig2D.velocity.x > 0) {
        if (ball.position.y > this.transform.position.y + .5F) {
            transform.Translate(Vector3.up * speed * Time.deltaTime);
        } else if (ball.position.y < this.transform.position.y - .5F) {
            transform.Translate(Vector3.down * speed * Time.deltaTime);
        }
    }
    // ... bounds checking ...
}
登入後複製

(uimanager.cs- partial)

// ... other methods ...

public void showFinished() {
    foreach (GameObject g in finishObjects) {
        g.SetActive(true);
    }
}

// ... other methods ...
登入後複製

void Update () {
    text.text = rightBound.GetComponent<BoundController>().enemyScore + "\t\t" +
                leftBound.GetComponent<BoundController>().playerScore;
}
登入後複製

(gameover.cs)

>
void Update () {
    if(uiManager.playerWon){
        text.text = "GAME OVER!\nPLAYER WON!";
    } else if(uiManager.enemyWon){
        text.text = "GAME OVER!\nENEMY WON!";
    }
}
登入後複製

記住在AI腳本中調整速度和計時等值以微調遊戲難度。 這種增強的乒乓球可提供更完整,更具吸引力的複古遊戲體驗。 GitHub鏈接(輸入中未提供)將包含完整的項目文件。

以上是建立UI和遊戲玩法的乒乓球克隆的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板