写一段C#的event用在unity之中,让player的碰撞体在触碰到gold的碰撞体的时候,在以player为中心的5个单位长度处随机生成一个gold物体,并且当玩家触碰到gold的时候gold消失。
时间: 2024-12-04 19:27:53 浏览: 12
在Unity中使用C#,你可以创建事件来处理Player和Gold的行为。首先,假设你已经有了Player和Gold两个游戏对象,以及它们各自的碰撞体。我们可以创建一个名为OnGoldCollected的自定义事件来触发黄金生成和消失的行为。
```csharp
using UnityEngine;
using System.Collections;
public class GoldManager : MonoBehaviour
{
public event Action<GameObject> GoldGeneratedAndDisappear; // 定义一个Action委托事件
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Gold"))
{ // 当Player碰撞到Gold
GenerateRandomGold(other.transform.position); // 生成新的Gold
other.gameObject.SetActive(false); // 黄金消失
OnGoldCollected?.Invoke(other.gameObject); // 触发事件
}
}
private void GenerateRandomGold(Vector3 goldPosition)
{
Vector3 newPosition = player.transform.position + Random.insideUnitCircle * 5f; // 随机位置在Player周围5个单位长度内
GameObject newGold = Instantiate(goldPrefab, newPosition, Quaternion.identity); // 创建新的Gold对象
newGold.tag = "Gold"; // 标记新生成的Gold
GoldGeneratedAndDisappear?.Invoke(newGold); // 如果有订阅者,通知他们新的Gold对象
}
}
// Player脚本需要订阅这个事件并在接收到金块时做些额外操作
public class PlayerController : MonoBehaviour
{
private GoldManager goldManager;
void Start()
{
goldManager = FindObjectOfType<GoldManager>(); // 获取GoldManager实例
goldManager.GoldGeneratedAndDisappear += HandleGoldGenerated; // 订阅事件
}
private void HandleGoldGenerated(GameObject gold)
{
Debug.Log($"Detected new gold at position: {gold.transform.position}");
// 这里可以添加对新生成金块的处理逻辑,比如显示提示或积分加成等
}
// 省略了GameObject.FindObjectOfType的异步处理
}
```
阅读全文