2016-11-24 135 views
0

我工作的一个产卵脚本,但有一个我无法找到一个解决问题的办法......转换的Vector3改造

我得到那个说

“不能隐式错误转换型“UnityEngine.Vector3”到“UnityEngine.Transform””

我可以通过添加.POSITION到spawningpos删除错误,但不会工作,因为它不是一个对象的变换只需在脚本变量变换

public GameObject[] spawningObj; 
public GameObject[] insects; 
public GameObject[] invierment; 
public GameObject[] inviermentSingel; 
public Transform player; 
public int maxNPCsPerChunk; 
public int maxInectsPerChunk; 
public int maxInviermentalsPerChunk; 
public int spawningAria; 

private Transform spawningpos; 

// Use this for initialization 
void Start() 
{ 
    if (player == null) 
     player = GameObject.FindWithTag("Player").transform; 

    int max = Random.Range(0, maxInectsPerChunk); 
    for (int i = 0; i < max; i++) 
    { 
     spawningpos = new Vector3(Random.Range(-spawningAria, spawningAria) + transform.position.x, 2f, Random.Range(-spawningAria, spawningAria) + transform.position.z); 
     //Error on above line 

     Instantiate(insects[Random.Range(0, insects.Length)], spawningpos); 
    } 
+0

为什么你不声明spawningpos作为'Vector3',因为你用它作为一个简单的位置? – Hellium

+0

变换是一个支持所有“变换”相关值的组件。将简单的Vector3转换为包含旋转,位置,比例等的结构几乎是不可能的。 –

+0

“spawningpos.position = new Vector3(Random.Ran ...”但这不是正确的做法。编辑:查看下面的答案为什么和如何:) – 2016-11-24 09:30:00

回答

7

你的问题是你收到的错误解释得非常好,让我们来看一看

“无法隐式转换类型‘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作为输入。正如你会发现here,您使用该方法的重载却是实实在在的父母的变换,试试这个,而不是

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方法的正确超载,设置对象t的旋转是必须的通过Vector3

+0

非常感谢!^^你只犯了一个错误,应该是身份而不是身份 – Diggs

+0

@Diggs我不好,会编辑大写] –