C# Unity C,在错误位置生成的对象

C# Unity C,在错误位置生成的对象,c#,object,unity3d,spawn,C#,Object,Unity3d,Spawn,我正在尝试在Y轴上以+0.6的空间逐个生成对象。对象应该是0.6、1.2、1.8、2.4、3等,而它看起来是0.6、1.8、3.6、6、9等。。 我不知道发生了什么,所以我希望你能帮助我,这里有一个代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Spawner : MonoBehaviour { public GameObject cubeOne,

我正在尝试在Y轴上以+0.6的空间逐个生成对象。对象应该是0.6、1.2、1.8、2.4、3等,而它看起来是0.6、1.8、3.6、6、9等。。 我不知道发生了什么,所以我希望你能帮助我,这里有一个代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour {

public GameObject cubeOne, cubeDouble, cubeTriple, cubeQuattro, cubeOneShort, cubeDoubleShort, cubeTripleShort, cubeQuattroShort, sphereOne, sphereDouble, sphereTriple, sphereQuattro, sphereOneShort, sphereDoubleShort, sphereTripleShort, sphereQuattroShort;
int whatToSpawn;
float position;
int yRotation;

void Update () {

        whatToSpawn = Random.Range(1, 5);
        position += 0.6f;
        Vector3 newPosition = transform.position;
        newPosition.y += position;

        switch (whatToSpawn)
        {
            case 1:
                Instantiate(cubeOne, transform.position = newPosition, transform.rotation * Quaternion.Euler(90, 0, 0));
                Debug.Log(position);
                break;
            case 2:
                Instantiate(cubeDouble, transform.position = newPosition, transform.rotation * Quaternion.Euler(90, 0, 0));
                Debug.Log(position);
                break;
            case 3:
                Instantiate(cubeTriple, transform.position = newPosition, transform.rotation * Quaternion.Euler(90, 0, 0));
                Debug.Log(position);
                break;
            case 4:
                Instantiate(cubeQuattro, transform.position = newPosition, transform.rotation * Quaternion.Euler(90, 0, 0));
                Debug.Log(position);
                break;
        }
   }
}

谢谢您的回答。

假设您尝试使用实例化重载公共静态对象实例化对象原始、矢量3位置、四元数旋转

实例化中的代码正在移动生成程序的transform.position。将实例化代码更改为:

Instantiate(cubeOne, newPosition, transform.rotation * Quaternion.Euler(90, 0, 0));
将位置添加到newposition,每次将位置增加0.6,并将其指定给繁殖对象。所以我看到的是这样的:

 loops  |  position | newposition |  p + np  =  result
-------------------------------------------------------
      1 |     0.6   |      0      |  0+0.6   =  0.6
             +0.6           .-------------------↵
               ↓           ↓
      2 |     1.2   |     0.6     |  1.2+0.6 =  1.8
             +0.6           .-------------------↵
               ↓           ↓
      3 |     1.8   |     1.8     |  1.8+1.8 =  3.6
等等


所以我认为这只是数学问题。因此,Fish提出的解决方案解决了这个问题。

产卵器的transform.position从未改变,因此它是完全有效的。@TheFish我再看了一眼:是的,它是:transform.position=newPosition,不是吗?我认为这是逻辑上的错误。“我不认为这是故意的。”鱼是的,你的答案是+1。