首页 > 解决方案 > 如何在 Unity 中将对象转换为变换?

问题描述

我有一个教程中使用的代码,https://www.youtube.com/watch?v=NtY_R0g8L8E,但我似乎收到了这个错误:

Assets/LevelGenerator.cs(22,27):错误 CS0266:无法隐式转换类型UnityEngine.Object' to UnityEngine.Transform'。存在显式转换(您是否缺少演员表?)

我该如何解决?谢谢

'''

using UnityEngine;
using System.Collections;

public class LevelGenerator : MonoBehaviour {

[SerializeField] private Transform redLevelPart;
[SerializeField] private Transform yellowlevelPart;

void Awake() 
{
    Transform lastlevelTransform;
    lastlevelTransform = SpawnLevelPart(redLevelPart.Find ("EndPosition").position);
    lastlevelTransform = SpawnLevelPart(lastlevelTransform.Find ("EndPosition").position);
    lastlevelTransform = SpawnLevelPart(lastlevelTransform.Find ("EndPosition").position);
    lastlevelTransform = SpawnLevelPart(lastlevelTransform.Find ("EndPosition").position);
    lastlevelTransform = SpawnLevelPart(lastlevelTransform.Find ("EndPosition").position);
}
// Update is called once per frame
private Transform SpawnLevelPart(Vector3 spawnpoint)
{
    Transform levelTransform =  Instantiate(yellowlevelPart, spawnpoint, Quaternion.identity);
    return levelTransform;
}

}

'''

标签: c#unity3d

解决方案


你的问题在这里:

Transform levelTransform =  Instantiate(yellowlevelPart, spawnpoint, Quaternion.identity);

错误消息告诉您您正在尝试将 Object 类型分配给 Transform 类型的变量。这是因为 Instantiate() 方法返回一个 GameObject(不是 Transform),但您将其分配给levelTransform具有 Transform 类型的对象。

您可以通过引用Instantiate()返回的 GameObject 的变换组件来解决这个问题。例如:

private Transform SpawnLevelPart(Vector3 spawnpoint)
{
    GameObject levelObject =  Instantiate(yellowlevelPart, spawnpoint, Quaternion.identity);
    Transform levelTransform = levelObject.transform;
    return levelTransform;
}

或者更简洁:

private Transform SpawnLevelPart(Vector3 spawnpoint)
{
    return Instantiate(yellowlevelPart, spawnpoint, Quaternion.identity).transform;
}


推荐阅读