-1

我创建了一个 Character 类,其构造函数为角色设置名称,并在一个文件中包含武器名称和伤害的 Weapon 结构。然后,我在另一个名为 Paladin 的文件中创建了一个 Character 子类,其中包含一个 Weapon 类型变量和继承自 Character 类的构造函数,该类为角色实例设置名称并创建一个新的 Weapon 实例。当我在另一个脚本文件中使用基本构造函数创建一个新的 Paladin 类型对象时,Unity 打印出一个 CS0103 错误,告诉我我给 Weapon 类型变量的名称在当前上下文中不存在。

我撞到了一堵巨大的实心砖墙。请帮忙。我尝试了我能想到的一切。

字符类:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Character {

    public string characterName = "";
    public int characterExp = 0;

    public Character() {
        characterName = "Not assigned";
    }

    // CONSTRUCTOR SETTING A NEW NAME FOR THE CHARACTER INSTANCE
    public Character(string characterName) {
        this.characterName = characterName;
    }


    public virtual void PrintStatsInfo() {
        Debug.Log($"Character: {characterName} - {characterExp}.");
    }

    private void Reset() {
        this.characterName = "Not assigned";
        this.characterExp = 0;     
        }
}

武器结构:

public struct Weapon {
    
    public string name;
    public int damage;

    public Weapon(string name, int damage) {
        this.name = name;
        this.damage = damage;
    }

    public void PrintWeaponStats() {
        Debug.Log($"Weapon: {name} - {damage} DMB.");
    }

圣骑士类(角色孩子):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Paladin: Character {

    public Weapon weapon;

    //CONSTRUCTOR INHERITED FROM CHARACTER CLASS
    public Paladin(string characterName, Weapon weapon): base(characterName) {

        this.weapon = weapon;
    }


    public override void PrintStatsInfo() {

        Debug.Log($"Hey {characterName}, take your {weapon.name}");
    }
}

执行其他工作的脚本文件:

using System.Collections.Generic;
using UnityEngine;

public class LearningCurve : MonoBehaviour {

    
    //CREATING THE PALADIN INSTANCE USING THE BASE CONSTRUCTOR
    Paladin knight = new Paladin("Osip", sword);
    
    void Start() {
  
        knight.PrintStatsInfo();
    }
}
4

1 回答 1

0

You have to create variable, before passing it down to constructor:

Weapon sword = new Weapon("Name", 1); // 1 as a damage
Paladin knight = new Paladin("Osip", sword);
于 2021-06-20T11:34:38.480 回答