3 回答
TA贡献1863条经验 获得超2个赞
有很多方法可以实现您的愿望。
我的建议一开始可能会超出您的舒适区,但它会为您提供最大的灵活性,并最终使您的游戏编程/设计/维护变得容易(在我看来)。
首先制作一个可编写脚本的对象(什么是可编写脚本的对象以及如何使用它?)
using UnityEngine;
using System.Collections;
using UnityEditor;
public class Item
{
[CreateAssetMenu(menuName = "new Item")]
public static void CreateMyAsset()
{
public GameObject prefab;
// you can add other variables here aswell, like cost, durability etc.
}
}
创建一个新项目(在 Unity 中,Assets/new Item)
然后创建一个可以容纳该项目的 monobehaviour 脚本。在您的情况下,让我们将其命名为“皮卡”。
public class Pickup : MonoBehaviour
{
public Item item;
}
最后在您的播放器脚本中,将您的 TriggerEnter 更改为:
void OnTriggerEnter2D(Collider2D other)
{
if(other.GetComponentInChildren<Pickup>())
{
var item = other.GetComponentInChildren<Pickup>().item;
_weaponPrefab = item.prefab;
}
}
TA贡献2021条经验 获得超8个赞
当您实例化一个 GameObject 时,您基本上需要传递 3 个参数(但并非所有参数都是必需的,请检查):
预制件
职位
轮换
假设您的手上或角色背后有一个占位符,用于在收集武器后将其保存在那里。这个占位符可以是一个空的游戏对象(没有附加预制件,但会有一个 transform.position 组件)
现在让我们假设您在场景中有一个武器列表,其中包含它们的预制件和不同的标签。然后你可以做这样的事情:
GameObject weapon;
GameObject placeholder;
public Transform sword;
public Transform bow;
...
void OnTriggerEnter2D(Collider2D other)
{
//You can use a switch/case instead
if(other.gameObject.tag == "sword"){
Instantiate(sword, placeholder.transform.position, Quaternion.identity);
}else if(other.gameObject.tag == "bow"){
Instantiate(bow, placeholder.transform.position, Quaternion.identity);
}...
}
- 3 回答
- 0 关注
- 146 浏览
添加回答
举报