Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置三维对象的繁殖位置_C#_Unity3d - Fatal编程技术网

C# 设置三维对象的繁殖位置

C# 设置三维对象的繁殖位置,c#,unity3d,C#,Unity3d,我正在统一制作一款无休止的跑步风格游戏,当地板砖在玩家面前随机无休止地生成,并在距离玩家一段距离后删除自己。这一切都很好,正如预期的那样。但是,各个地板砖在彼此中间生成,并且我尝试调试我的游戏代码我似乎无法影响他们。理想情况下,我希望代码能够完全执行它正在执行的操作,但是瓷砖会端到端地生成,而不是彼此内部生成 任何帮助都将不胜感激 using System.Collections; using System.Collections.Generic; using UnityEngine; pu

我正在统一制作一款无休止的跑步风格游戏,当地板砖在玩家面前随机无休止地生成,并在距离玩家一段距离后删除自己。这一切都很好,正如预期的那样。但是,各个地板砖在彼此中间生成,并且我尝试调试我的游戏代码我似乎无法影响他们。理想情况下,我希望代码能够完全执行它正在执行的操作,但是瓷砖会端到端地生成,而不是彼此内部生成

任何帮助都将不胜感激

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


public class Tile_Manager : MonoBehaviour
{

    public GameObject[] tilePrefabs;

    private Transform playerTransform;
    private float spawnZ =  5.0f;
    private float tileLength = 5.0f;
    private float safeZone = 7.0f;
    private int amtTilesOnScreen = 10;
    private int lastPrefabIndex = 0;

    private List<GameObject> activeTiles;
    // Use this for initialization
    void Start () {
        activeTiles = new List<GameObject>();
        playerTransform = GameObject.FindGameObjectWithTag ("Player").transform;

        for (int i = 0; i < amtTilesOnScreen; i++)
        {
            if (i < 2)
                SpawnTile(0);
            else
                SpawnTile();
        }
    }

    // Update is called once per frame
    void Update () {
        if (playerTransform.position.z - safeZone > (spawnZ - amtTilesOnScreen * tileLength))
        {
            SpawnTile();
            DeleteTile();
        }

    }

    private void SpawnTile(int prefabIndex = -1)
    {
        GameObject go;
        if (prefabIndex == -1)
            go = Instantiate(tilePrefabs[RandomPrefabIndex()]) as GameObject;
        else
            go = Instantiate(tilePrefabs[prefabIndex]) as GameObject;
        go.transform.SetParent(transform);
        go.transform.position = Vector3.forward * spawnZ;
        spawnZ += tileLength;
        activeTiles.Add (go);
    }

    private void DeleteTile()
    {
        Destroy(activeTiles [0]);
        activeTiles.RemoveAt (0);
    }

    private int RandomPrefabIndex()
    {
        if (tilePrefabs.Length <= 1)
            return 0;

        int randomIndex = lastPrefabIndex;
        while (randomIndex == lastPrefabIndex)
        {
            randomIndex = Random.Range(0, tilePrefabs.Length);
        }

        lastPrefabIndex = randomIndex;
        return randomIndex;
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类Tile_经理:MonoBehavior
{
公共游戏对象[]tilePrefabs;
私有转换玩家转换;
专用浮点数Z=5.0f;
专用浮点数长度=5.0f;
私人浮动安全区=7.0f;
屏幕上的私有int AMTTILES=10;
私有索引=0;
私有列表;
//用于初始化
无效开始(){
activeTiles=新列表();
playerTransform=GameObject.FindGameObjectWithTag(“玩家”).transform;
对于(int i=0;i(屏幕上的z-amttiles*波浪长度))
{
产卵片();
DeleteTile();
}
}
私有void-SpawnTile(int-index=-1)
{
游戏对象围棋;
如果(索引==-1)
go=实例化(tilePrefabs[RandomPrefableIndex()])作为游戏对象;
其他的
go=实例化(tilePrefabs[prefableIndex])作为游戏对象;
go.transform.SetParent(transform);
go.transform.position=Vector3.forward*spawnZ;
spawnZ+=波浪长度;
activeTiles.Add(go);
}
私有void DeleteTile()
{
销毁(activeTiles[0]);
activeTiles.RemoveAt(0);
}
私有int索引()
{
如果(tilePrefabs.Length您不想要吗

go.transform.Translate(Vector3.forward * spawnZ);
不是位置

当您生成相对于世界坐标系的对象时。

您需要考虑磁贴的长度。请尝试更改此选项

go.transform.position = Vector3.forward * spawnZ;
对此

go.transform.position = Vector3.forward * (spawnZ + tileLength / 2);

将瓷砖长度的一半添加到“繁殖”位置。

我尝试了这种方法,但似乎没有改变任何东西。我添加了一张图像,以更好地显示我的问题,因此橙色边框将勾勒出每个瓷砖的轮廓,正如您所看到的,它们是堆叠的,更改了您建议的内容,但没有做任何事情,但我可能做错了。我对这种类型还相当陌生当然,我还在学习。@Bitlite你能提供一些更多的信息吗?例如,分段模型的实际长度,inspector屏幕截图等。它的单位为5米,当我最初制作平面时,我将沿Z方向的比例设置为5axis@Bitlite你用的是统一的平面吗?因为那个平面是10x10统一单位我生成了默认的单位平面,然后将z比例设置为5,这样会使它变为50米吗?