[英]convert vector3 to transform
我收到错误
“无法将类型 'UnityEngine.Vector3' 隐式转换为 'UnityEngine.Transform'”
将 Vector3 转换为 Transform 的最有效方法是什么?
使用示例:
Vector3 spawningpos = getSpawnPos();
Instantiate(myPrefab, spawningpos);
您收到的错误很好地解释了您的问题,让我们看看
“无法将类型 'UnityEngine.Vector3' 隐式转换为 'UnityEngine.Transform'”
那么你在哪里尝试将Transform
的值设置为 Vector3 ?
private Transform spawningpos;
spawningpos
是一个转换
spawningpos = new Vector3(Random.Range(-spawningAria, spawningAria) + transform.position.x, 2f, Random.Range(-spawningAria, spawningAria) + transform.position.z);
但是在这里您显然将其值设置为Vector3
Instantiate(insects[Random.Range(0, insects.Length)], spawningpos);
然后在这一行实例化对象 - 使用Transform
作为输入。 正如您将在此处找到的,您用于该方法的重载实际上是在请求父级的转换,请尝试使用此方法
private Vector3 spawningpos;
跟之前一样
spawningpos = new Vector3(Random.Range(-spawningAria, spawningAria) + transform.position.x, 2f, Random.Range(-spawningAria, spawningAria) + transform.position.z);
最后
Instantiate(insects[Random.Range(0, insects.Length)], spawningpos, Quaternion.identity);
此代码将调用Instantiate
方法的正确重载,传递Vector3
时必须设置对象的旋转
您不能直接将 Vector3 对象转换为 Transform。 我找到了一个简单的方法来做到这一点。
试试我下面的演示代码,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeSpawner : MonoBehaviour {
[SerializeField] GameObject cube;
[SerializeField] Transform spawnTransform;
// Start is called before the first frame update
void Start() {
InvokeRepeating("SpawnCubes", 2, 0.5f);
}
// Update is called once per frame
void Update(){
}
void SpawnCubes() {
spawnTransform.position = new Vector3 (Random.Range (0f, 10f), 18f, 0f);
GameObject cube1 =Instantiate(cube, spawnTransform) as GameObject;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.