Unity 中的 2D 硬币收集

金币拾取和收集已成为 2D 游戏的主要内容,尤其是在 2D 平台游戏 中。

要在 Unity 中拾取硬币,我们需要创建一个脚本,该脚本将附加到 coin 对象,并且一旦玩家接触到它就会被销毁,更新计数器值。

Sharp Coder 视频播放器

我将使用 2D 角色控制器,但如果您已经有 2D 控制器,则可以跳过这一部分。

脚步

要制作可拾取和收集的 2D 硬币,请按照以下步骤操作:

  • 创建一个新的 GameObject(GameObject -> Create Empty)并为其命名 "Coin"
  • SpriteRenderer 组件附加到 "Coin" 对象
  • 将您的硬币精灵分配给 SpriteRenderer(您可以使用下图,确保导入设置中的纹理类型设置为 'Sprite (2D and UI)')

金币透明图像

  • 缩放硬币对象直到所需的大小
  • 更改硬币 'Z' 轴位置,使其与玩家的位置相匹配
  • BoxCollider2D 组件附加到 "Coin" 对象
  • 创建 一个新脚本,将其命名为 "SC_2DCoin",删除其中的所有内容,然后将以下代码粘贴到其中:

SC_2DCoin.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SC_2DCoin : MonoBehaviour
{
    //Keep track of total picked coins (Since the value is static, it can be accessed at "SC_2DCoin.totalCoins" from any script)
    public static int totalCoins = 0; 

    void Awake()
    {
        //Make Collider2D as trigger 
        GetComponent<Collider2D>().isTrigger = true;
    }

    void OnTriggerEnter2D(Collider2D c2d)
    {
        //Destroy the coin if Object tagged Player comes in contact with it
        if (c2d.CompareTag("Player"))
        {
            //Add coin to counter
            totalCoins++;
            //Test: Print total number of coins
            Debug.Log("You currently have " + SC_2DCoin.totalCoins + " Coins.");
            //Destroy coin
            Destroy(gameObject);
        }
    }
}
  • SC_2DCoin 脚本附加到 "Coin" 对象
  • 选择您的玩家对象并确保其标签设置为 "Player" (这是捡起硬币所必需的)

硬币现在已准备就绪,您可以将其保存到 Prefab 并在关卡周围复制它。

要创建硬币计数器,请按照以下步骤操作:

  • 通过右键单击“层次结构视图”->“UI”->“图像”来创建新的 UI 图像并为其命名 "CoinIcon"
  • 将硬币精灵分配给图像组件
  • 将 RectTransform 对齐更改为 'top left',枢轴更改为 (0, 1),Post X 更改为 '5',Pos Y 更改为 '-5',宽度和高度更改为 '25'

  • 通过右键单击“层次结构视图”->“UI”->“文本”创建新文本并为其命名 "CoinCounter"
  • 将 "CoinCounter" RectTransform 设置为与 "CoinIcon" 相同,但将 Pos X 设置为 '35' 并将 Width 设置为 '160'
  • 将文本字体样式设置为 'Bold',字体大小设置为 22,对齐方式设置为 'left center',颜色设置为 'white'

  • 创建一个新脚本,将其命名为 "SC_CoinCounter",删除其中的所有内容,然后将以下代码粘贴到其中:

硬币计数器脚本会将硬币数量应用于 Text 元素。

SC_CoinCounter.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SC_CoinCounter : MonoBehaviour
{
    Text counterText;

    // Start is called before the first frame update
    void Start()
    {
        counterText = GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
        //Set the current number of coins to display
        if(counterText.text != SC_2DCoin.totalCoins.ToString())
        {
            counterText.text = SC_2DCoin.totalCoins.ToString();
        }
    }
}
  • SC_CoinCounter 脚本附加到 "CoinCounter" 文本对象

按“开始”并观察硬币在玩家接触时消失并添加到计数器中。

推荐文章
Weather Maker - 将 Unity 环境提升到新高度
如何在 Unity 中设置用于移动的操纵杆控制器
Unity 如何在鼠标单击时生成对象
Zone Controller Pro - Unity Asset Store 包
如何在 Unity 中使用新的 HDRP 水系统
FPC Swimmer - 用于沉浸式水环境的综合 Unity 资产
Ultimate Spawner 2.0 - 改变游戏规则的资产