我已经和Unity合作了一段时间,并且正在使用C#编写脚本。
我正在编写一个脚本,检查所选目标是NPC还是Craft(工作站)。
由于脚本的基础是调用许多其他脚本和变量,我不想复制所有脚本以制作另一种NPC,在我的例子中是Craft(station) 。
让我现在详细解释一下例子:
void UpdateNpcTrading(Player player) {
// only if visible
if (!npcTradingPanel.activeSelf) return;
// npc trading
if (player.target != null && player.target is Craft &&
Vector3.Distance(player.transform.position, player.target.transform.position) <= player.talkRange) {
var npc = (Craft)player.target; // Here is the var I need to edit
// items for sale
for (int i = 0; i < npcTradingContent.childCount; ++i) {
var entry = npcTradingContent.GetChild(i).GetChild(0);
// get the item
if (i < npc.saleItems.Length) {
var item = npc.saleItems[i];
还有更多内容(如果需要可随意提出要求)
因此,行var npc = (Craft)player.target;
将npc标识为Craft,因为player.Target = Craft
。
但我想编辑它以便它检查player.target = Craft
然后,设置var npc = Craft
但如果player.target = Npc
,请设置var npc = Npc
。
不确定我是否清楚自己。请随时询问更多细节,我会尽力而为。
任何帮助都非常感谢,迈克
编辑:
好的,所以我像这样编写脚本。仍然当我在游戏中运行它看起来不知道该怎么做..(但编译器不显示语法错误)
// npc trading
if (player.target != null && player.target is Craft &&
Vector3.Distance(player.transform.position, player.target.transform.position) <= player.talkRange) {
var npc = (Craft)player.target;
}else if (player.target != null && player.target is Npc &&
Vector3.Distance(player.transform.position, player.target.transform.position) <= player.talkRange) {
var npc = (Npc)player.target;
// items for sale
for (int i = 0; i < npcTradingContent.childCount; ++i) {
var entry = npcTradingContent.GetChild(i).GetChild(0);
// get the item
if (i < npc.saleItems.Length) {
var item = npc.saleItems[i];
我错在哪里
答案 0 :(得分:4)
看起来您正在寻找is
运营商。
if (player.target is Craft)
{
var npc = (Craft)player.target;
// do other 'Craft' logic here
}
else if (player.target is Npc)
{
var npc = (Npc)player.target;
// do other 'Npc' logic here
}
我假设player.target
可以是Npc
还是Craft
?如果是这种情况,则它们都从任何基类型player.target
继承。在投出之前,您可以使用Craft
运算符检查它是Npc
还是is
。