簡體   English   中英

如何統一解決類之間的 CS7036 錯誤?

[英]How do I solve CS7036 error between classes in unity?

我假設這兩個代碼塊與以下錯誤有關:

Assets\\Scripts\\Weapons.cs(8,12): 錯誤 CS7036: 沒有給出與“Item.Item(string, int)”所需的形式參數“name”相對應的參數

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

public class Item : MonoBehaviour
{
    private string name;
    private int quantity;

    public Item(string name, int quantity)
    {
        this.name = name;
        this.quantity = quantity;
    }
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Quantity
    {
        get { return quantity; }
        set { quantity = value; }
    }

    public virtual void UseItem()
    {

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

public class Weapons : Item
{
    public GameObject bullet;
    public GameObject shotgunSpawn;
    public GameObject shotgunSpawn2;

    //public bool useGun;

    public Inventory iw;
    GUI_2D m;

    public float Speed;

    GameObject patroller;
    GameObject guard;

    public bool pellet;
    public bool shotGun;
    public bool barGun;
    public PlayerController player;

    // Start is called before the first frame update
    void Start()
    {
        Speed = 5f;
        player = GameObject.FindGameObjectWithTag("Player");
        patroller = GameObject.FindGameObjectWithTag("Patroller");
        guard = GameObject.FindGameObjectWithTag("Guard");
        guard = GameObject.FindGameObjectWithTag("Shotgun");
        pellet = false;
        shotGun = false;
        barGun = false;
    }

    void DestroyEnemy()
    {
        if (patroller)
        {
            patroller.SetActive(false);
        }
        if (guard)
        {
            patroller.SetActive(false);
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (iw.invItems.Count < 12)
        {
            if (other.gameObject.CompareTag("Player"))
            {
                pellet = true;
            }
        }
    }

    public override void UseItem()
    {
        if (pellet)
        {
            player.pellet = true;
            player.shotGun = false;
            player.barGun = false;
        }
        if (shotGun)
        {
            player.pellet = false;
            player.shotGun = true;
            player.barGun = false;
        }
        if (barGun)
        {
            player.pellet = false;
            player.shotGun = false;
            player.barGun = true;
        }
         base.UseItem();
    }
}

我不想更改項目類,因為這樣做會影響另一個依賴於項目類構造函數的類。 除非有另一種方法可以通過更改項目類來解決錯誤。 給出的錯誤也以同樣的方式影響另一個類。 我希望從這里的答案中解決武器類和其他類中的問題。 先感謝您。

不應該向 MonoBehaviours 添加構造函數,因為 Unity Engine 負責實例化它們並且永遠不會傳遞你的構造函數參數(你也不應該創建 MonoBehaviours 的實例)。

只需刪除您的 Item 構造函數並在需要時手動分配值。 其他構造代碼應該在Awake()Start()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM