c# - 从组件列表中动态添加组件
问题描述
我将其分解以提供理解。
我有一个父类Item。
我为每种类型的项目(武器、盔甲等)都有子类。
我有所有物品的清单。
我正在尝试从该列表中随机抓取一个项目,然后将其添加为组件。我的每个项目都随机生成自己的名称、统计信息等,但它们都特定于它们的项目类型,因此我需要在它们自己的类中生成它们,而不仅仅是生成“项目”。
这就是我到目前为止所拥有的。
public Item RandomList(List<Item> list)
{
return list[random.Next(list.Count)];
}
这会从我的列表中返回一个随机项目。
public void GenerateLoot(GameObject gameObject, List<Item> list)
{
gameObject.AddComponent(randomManager.RandomList(list));
}
这是我遇到问题的地方。它说:“无法从 Item 转换为 System.Type”。我尝试了各种方法,例如使用 typeof 等。
这是我相当新的东西。
解决方案
AddComponent
似乎不支持脚本类型以外的参数,如果我理解正确,您的项目在许多方面都是可定制的,当您在运行时添加组件时应该应用这些方面。我建议AddToGameobject
在类中添加方法Item
:
abstract class Item : Monobehaviour {
public abstract void AddToGameObject (GameObject obj);
}
class Weapon : Item {
int damage;
int cooldown;
public override void AddToGameObject (GameObject obj) {
var copy = obj.AddComponent <Weapon> ();
copy.damage = damage;
copy.cooldown = cooldown;
}
}
class Armor : Item {
int protection;
public override void AddToGameObject (GameObject obj) {
var copy = obj.AddComponent <Armor> ();
copy.protection = protection;
}
}
你的战利品生成功能将变为
public void GenerateLoot (GameObject gameObject, List <Item> list) {
randomManager.RandomList (list).AddToGameObject (gameObject);
}
推荐阅读
- .net - 如何练习大型 SQL Server 索引或分区问题进行面试?
- java - JavaFX:组合框双向排除
- laravel - 错误:添加数据时“请求失败,状态码为 500”
- android - Android Studio 事件日志中的时间不正确
- node.js - Node.js HTTP 服务器子进程不会在 Node.js 中被杀死
- angular - 角度测试错误 - 无法绑定到“项目”,因为它不是“应用下拉菜单”的已知属性
- email - Ansible:如何使用来自远程主机的文件发送附件
- c++ - Qt错误无效使用不完整类型'class UI::FrameLess'
- javascript - 如何以特定格式显示今天的完整日期?
- php - mysqli_query():第 1924 行 /home/lucindabrummitt/public_html/blog/wp-includes/wp-db.php 中的空查询