【问题标题】:Cannot implicity convert type object to unityengine.Vector3无法将类型对象隐式转换为 unityengine.Vector3
【发布时间】:2013-06-30 20:15:20
【问题描述】:

我想在场景中放置六个物体(球)。我认为代码看起来可行,但我收到一条控制台消息。消息:

“Assets/GameScripts/Instance.cs(26,40): 错误 CS0266: 不能 隐式转换类型object' toUnityEngine.Vector3'。显式 存在转换(您是否缺少演员表?)”

使用 UnityEngine; 使用 System.Collections;

公共类实例:MonoBehaviour { 公共 GameObject 球;

public ArrayList coordinateContainer = new ArrayList();



// Use this for initialization
void Start () {

    coordinateContainer.Add(new Vector3(1f,1f,1f));
    coordinateContainer.Add(new Vector3(2f,1f,1f));
    coordinateContainer.Add(new Vector3(3f,1f,1f));
    coordinateContainer.Add(new Vector3(4f,1f,1f));
    coordinateContainer.Add(new Vector3(5f,1f,1f));
    coordinateContainer.Add(new Vector3(6f,1f,1f));


    //ball.transform.position = new Vector3(1f,1f,1f);
    ball.transform.rotation = Quaternion.identity;

    for (int i = 0; i <  6; i++) {
        ball.transform.position = coordinateContainer[i];
        Instantiate(ball,ball.transform.position,ball.transform.rotation);
    }
}

// Update is called once per frame
void Update () {

}

}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    由于您使用的是ArrayList,因此向量被存储为objects。试试这个

    ball.transform.position = (Vector3)coordinateContainer[i];
    

    您最好使用List&lt;Vector3&gt; 而不是ArrayList,这样您就可以避免强制转换(因为List&lt;T&gt; 只能保存T 类型的对象)。

    【讨论】:

    • 'Assets/GameScripts/Instance.cs(26,74): error CS0077: The as' operator cannot be used with a non-nullable value type UnityEngine.Vector3'' - 当我尝试“作为 Vector3”时收到该消息。
    • @HalilCosgun - 我已经更新了使用直接投射的答案。这是使用List&lt;T&gt; 的另一个好理由,因为您正在循环遍历coordinateContainer 中的所有对象,如果不能将其转换为Vector3 对象,则会引发异常。
    • 非常感谢。 :) 有用。感谢您的建议,我将使用 List。
    • @HalilCosgun - 不客气。根据调用它的频率,您可能还会注意到 List 的速度提高,因为 Vector3 是一种值类型,这意味着在 ArrayList 中存储和检索时必须将其装箱和拆箱。使用列表,您可以避免装箱/拆箱性能下降。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多