iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
自我挑戰組

Unity入門遊戲開發與實作系列 第 13

【Day 13】製作一個簡單 Unity 小遊戲(二)角色前進

  • 分享至 

  • xImage
  •  

昨天,我們在場景中創建了一個賽道 Ground 還有一個紅色方塊 Player ,並且新增了一個 Player 的腳本,用於給這個 Plyaer 一個持續向前的推力,昨天的腳本看似沒有問題,但其實有一些特殊狀況會使得遊戲沒辦法正常運行,所以我們今天要來修改這些問題。

先回到上次的程式碼

// PlayerMovement.cs
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    // Start is called before the first frame update
    public Rigidbody Rb;
    public folat forwardForce = 2000;
    
    void Start()
    {
		
    }
    
    // Update is called once per frame
    void Update()
    {
		rb.AddForce(0, 0, forwardForce);
    }
}
  1. 幀率問題
  • Update()函式是在遊戲的每一幀都呼叫一次,也意味著在那些每秒能運行更多幀電腦上,這個函式一秒內被呼叫更多次。例如在 60 幀中這個方塊每秒受到 60 次的推力,而在 120 幀就會因為每秒受到 120 次推力而跑得更快!這件事不僅發生在不同效能的電腦之間,也可能發生在同一台電腦上!例如當畫面中同時存在太多物體,導致電腦不得不將低幀數來維持遊戲的運行,這時也會影響到方塊的速度。
  • 解決這個問題的方法是在變數後面乘上 Time.deltaTime ,這個值表示的是電腦產生每個幀之間的毫秒數,越高幀率就會得到越低的值,越低幀率就會得到越高的值,以此來平衡這個問題
  • 在調整之後因為乘上了一個很小的值,所以方塊移動的速度會大幅下降,這時候就需要再調高 forwardForce 的值才能恢復正常
  1. FixedUpdated
    • 在 Unity 中凡是牽涉到物理計算的事件時都應該使用 FixedUpdate 而不是 Update ,但這牽涉到很多更詳細的 function 執行順序,所以暫時不做更詳細的說明。

我們修改完的程式碼長這樣:

// PlayerMovement.cs
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    // Start is called before the first frame update
    public Rigidbody Rb;
    public folat forwardForce = 2000;
    
    void Start()
    {
		
    }
    
    // Update is called once per frame
    void FixedUpdate()
    {
		rb.AddForce(0, 0, forwardForce * Time.deltaTime);
    }
}

接下來回到遊戲中
https://ithelp.ithome.com.tw/upload/images/20240927/201693017QWZD7LgpU.png
這個方塊一直翻滾並不是我們想要的,我們需要方塊在地板上穩定的滑行

  • PlayerRigidbody 中找到 Freeze Rotation ,並且將 X 軸方向的旋轉鎖定起來,避免方塊一直滾動
    https://ithelp.ithome.com.tw/upload/images/20240927/20169301zYQY1IYCLp.png
  • 再按下 Play 之後可以看到方塊就穩穩地在地上滑行了!
    https://ithelp.ithome.com.tw/upload/images/20240927/20169301ecq4TtmLG6.png
    今天我們修改了程式碼的小錯誤,並且讓方塊能夠順利的在地板上沿著一個方向滑動,明天要來添加程式碼讓玩家可以透過鍵盤操控方塊的左右!

上一篇
【Day 12】製作一個簡單 Unity 小遊戲(一)場景建設
下一篇
【Day 14】製作一個簡單 Unity 小遊戲(三)鍵盤控制和第三人稱視角
系列文
Unity入門遊戲開發與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言