Unity 中的 2D 硬币收集
金币拾取和收集已成为 2D 游戏的主要内容,尤其是在 2D 平台游戏 中。
要在 Unity 中拾取硬币,我们需要创建一个脚本,该脚本将附加到 coin 对象,并且一旦玩家接触到它就会被销毁,更新计数器值。
我将使用 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" 文本对象
按“开始”并观察硬币在玩家接触时消失并添加到计数器中。