【问题标题】:Unity Object Always Instantiating at 0, 0, 0Unity 对象始终在 0、0、0 处实例化
【发布时间】:2015-08-06 21:17:43
【问题描述】:

我正在尝试在我的 Minecraft 克隆中进行简单的地形生成。每当我尝试运行脚本时,它都会将所有实例化的对象放在位置 0、0、0。这是我用于地形生成的 C# 代码:

using UnityEngine;
using System.Collections;

public class TerrainGen : MonoBehaviour {

    public int radius;
    public int maxHeight;

    public GameObject block;

    void Start ()
    {
        for (float x = 0; x < radius; x+=1)
        {
            for (float z = 0; z < radius; z+=1)
            {
                float y = Random.Range(1, maxHeight);
                Vector3 v = new Vector3(x, y, z);
                GameObject newBlock = Instantiate(block, v, Quaternion.identity) as GameObject;
                Debug.Log("Block's Position: " + newBlock.transform.position + " | Wanted Position: " + v);
            }
        }
    }

    void Update ()
    {

    }

【问题讨论】:

  • 你忘记了密码。
  • 悬念要了我的命
  • 对不起,我在粘贴代码之前不小心发布了它
  • @bloobchube - 出于好奇,尝试将 Vector3 v = new Vector3(x, y, z); 替换为 Vector3 v = new Vector3(100, 100, y)。然后会发生什么?
  • Pikamander2 我做到了。所有的块仍然保持在 0, 0, 0。

标签: c# object unity3d instantiation gameobject


【解决方案1】:

看起来radius 尚未设置为值,因此您的 for 循环只运行一次。

由于xz 从零开始,并且它们都只运行一次,所以对象的xz 位置被设置为零。

【讨论】:

  • 谢谢,但不,这不是问题所在。在 Unity 级别编辑器窗口中,我将变量半径和最大高度设置为 20 和 1。
  • @bloobchube - 使用 Debug.Log 检查循环内 z 和 x 的值。我认为它们为零,出于某种原因。
  • Pikamander2 我试过了。它记录了想要的位置和实际的格挡位置都相同,并且格挡位置不在游戏中的位置。
  • 这对我来说听起来像是一个育儿问题。块预制件有父母/孩子吗?
【解决方案2】:

对于我给你们所有优秀的人造成的所有麻烦,我深表歉意。当然,我是无知的,问题不在于我的地形生成脚本,而在于我的块脚本!!!!我一直在设置街区的位置,我非常愚蠢。谢谢!

【讨论】:

    【解决方案3】:

    尝试这样做:

    GameObject newBlock = Instantiate(block, v, Quaternion.identity) as GameObject;
    newBlock.transform.position = v;
    

    我不知道这是否能解决你的问题,我也不知道这是否是实例化方法的错误或我们的误解,但每次我尝试实例化 UI 元素时,我都需要以与上述相同的方式重置位置(和比例)。从未尝试过使用多维数据集,但使用 UI 可以完成这项工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2023-03-10
      • 2014-01-09
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多