CobraCoder
CobraCoder

Reputation: 35

How can I convert from an object to a transform in Unity?

I have a code used from a tutorial, https://www.youtube.com/watch?v=NtY_R0g8L8E, but I seem to be getting this error:

Assets/LevelGenerator.cs(22,27): error CS0266: Cannot implicitly convert type UnityEngine.Object' to UnityEngine.Transform'. An explicit conversion exists (are you missing a cast?)

How do I fix this? Thanks

'''

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;
}

}

'''

Upvotes: 0

Views: 687

Answers (1)

HumanWrites
HumanWrites

Reputation: 945

Your issue is here:

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

The error message is telling you that you're trying to assign an Object type to a variable of the Transform type. That's because the Instantiate() method returns a GameObject (not a Transform) but you're assigning it to levelTransform which has the Transform type.

You can solve that by referencing the transform component of the GameObject that Instantiate() returns. For example:

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

Or more tersely:

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

Upvotes: 2

Related Questions