var = 2件事

时间:2016-02-18 21:21:22

标签: c# unity3d

我已经和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];

我错在哪里

1 个答案:

答案 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