Unity 2D 實作磁鐵吸引功能


建立時間: 2023年4月20日 01:16
更新時間: 2023年7月15日 12:44

說明

相信大家在玩遊戲時,有時候會看到玩家在撿東西時,例如:金幣,金幣會主動往玩家身上靠近,這裡我將分享這個功能的腳本給大家,實作原理並不困難。

腳本

Effect.cs

using UnityEngine;

/// <summary>
/// 效果類別
/// </summary>
public class Effect : MonoBehaviour
{
    private GameObject player;
    private Rigidbody2D myRigidbody2D;
    private Vector2 direction;

    /// <summary>
    /// 是否啟動吸引力
    /// </summary>
    public static bool ActiveAttraction
    {
        get;
        set;
    } = false;

    // Start is called before the first frame update
    void Start()
    {
        player = GameObject.Find("Player");
        myRigidbody2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        if (ActiveAttraction)
        {
            Attract();
        }
    }

    /// <summary>
    /// 吸引效果物件
    /// </summary>
    private void Attract()
    {
        direction = (player.transform.position - transform.position).normalized;
        myRigidbody2D.velocity = direction * 4f;
    }
}

這是一個我在遊戲中的 Effect 腳本簡化後的程式,只要將 Effect 腳本加在遊戲物件上,並且加上 Rigidbody 2D,然後 Rigidbody 2D 的 Gravity Scale 設定為0,使其不會掉落。

只要將 ActiveAttraction 設為 true,它就會慢慢靠近玩家,為了方便測試,你可以在 Start()ActiveAttraction 設為 true。

以下是腳本的說明

  • 首先你不會有 Player 遊戲物件,這是我的遊戲中的物件,你需要將它改成你的遊戲中的物件,或暫時建立一個簡易的立方體遊戲物件,名稱取名 Player 作為測試
  • 因為我主要是要說明吸引的程式,所以這裡沒有處理碰撞功能
  • Attract() 中可以看到計算 direction 的公式,這個公式就是取得此物件往玩家的方向向量
  • 向量有方向和大小,normalized 就是將向量大小設為1個單位
  • 這裡我使用 myRigidbody2D.velocity 讓它以等速移動,你可以任意將其更改為其他的運動方式

以上就是一個簡易的吸引功能。

觀看次數: 1050
attractattractionmagnetunity吸引磁鐵
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!