繁体   English   中英

将 vector3 转换为变换

[英]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。 我找到了一个简单的方法来做到这一点。

  • 首先在场景中创建一个 spawnPosition - 一个空的游戏对象。
  • 将变换位置设置为 (0,0,0)
  • 向位置添加随机值。
  • 使用 spawnPosition 的变换。

试试我下面的演示代码,

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM