c# - 如何在 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;
}
}
'''
解决方案
你的问题在这里:
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;
}