【问题标题】:CS0266 C# Cannot implicitly convert type 'UnityEngine.Object' to ''. An explicit conversion exists (are you missing a cast?)CS0266 C# 无法将类型“UnityEngine.Object”隐式转换为“”。存在显式转换(您是否缺少演员表?)
【发布时间】:2020-09-26 11:12:26
【问题描述】:

我有一个编译器错误,编译器无法将类型“UnityEngine.Object 转换为 Gun。我不认为这些是不同的文件类型,但无论如何,这是我的代码。我对此感到困惑,我”我还没有 C# 方面的专业人士,所以如果这是一个 n00b 错误,请原谅我。我知道如何使用插入的代码,这让我感到困惑,所以这里是一个打印屏幕。

using UnityEngine;
using System.Collections;

public class GunController : MonoBehaviour {

    public Transform WeaponHold;
    public Gun startingGun;
    Gun equippedGun;

    void Start()
    {
        if (startingGun != null)
        {
            EquipGun(startingGun);
        }
    }

    public void EquipGun(Gun gunToEquip)
    {
        if(equippedGun != null)
        {
            Destroy(equippedGun.gameObject);
        }
        equippedGun = Instantiate(gunToEquip, WeaponHold.position,WeaponHold.rotation);
        equippedGun.transform.parent = WeaponHold;
    }
}

【问题讨论】:

  • 请直接在您的问题中发布代码,而不是截图。
  • "Idk how to use the code insert on this, it confuses me" -- 复制粘贴。没有特别的“秘密”。
  • 当我第一次尝试时它并没有真正为我工作,但现在它可以了。当然。
  • 使用实例化代码,我尝试了两个装备Gun = Instantiate(gunToEquip, WeaponHold.position,WeaponHold.rotation) as GameObject;和装备枪 = (GameObject)Instantiate(gunToEquip, WeaponHold.position,WeaponHold.rotation);并且还用 Gun 替换了 GameObject,没有运气。
  • Instantiate 正在返回 UnityEngine.Object 并且您正在尝试将其分配给 Gun。您可以做的是铸造或创建枪的新实例,并将参数从对象一一分配到枪。或者使用构造函数。或者定义隐式转换。

标签: c#


【解决方案1】:

Instantiate 方法返回一个 object,您可以将其强制转换为必要的类型。

将其发送给Gun,它应该停止抱怨:

equippedGun = (Gun)Instantiate(gunToEquip, WeaponHold.position, WeaponHold.rotation);

【讨论】:

  • 是的,我试过了,但我仍然在编译器中遇到错误......但是当我将它加载到 Unity 中时它可以工作......很奇怪。无论如何,谢谢。
【解决方案2】:

确保您的类继承自 MonoBehaviour。

public class MyClass : MonoBehaviour{

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多