为什么在更新时动态创建 4 面墙时,两面墙的高度比另外两面低?

Why when creating 4 walls dynamic in the update two walls height lower then the two others ?

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

public class WallsTest : MonoBehaviour
{
    public Transform prefab;
    public float wallsSize;
    public Vector3 wallsStartPosition;

    private List<Transform> walls = new List<Transform>();

    // Use this for initialization
    void Start()
    {
        for (int i = 0; i < 4; i++)
        {
            Transform go = Instantiate(prefab);
            go.transform.parent = transform;
            go.transform.localPosition = wallsStartPosition;
            walls.Add(go);
        }

        walls[2].transform.localPosition = new Vector3(wallsStartPosition.x + wallsSize, 0, wallsStartPosition.z + wallsSize);
        walls[3].transform.localPosition = new Vector3(wallsStartPosition.x + wallsSize, 0, wallsStartPosition.z + wallsSize);
    }

    // Update is called once per frame
    void Update()
    { // transform.localScale.z != wallsSize
        if (walls[0].transform.position.x != wallsSize && walls[0].transform.localScale.z != wallsSize
            && walls[1].transform.position.x != wallsSize && walls[1].transform.localScale.z != wallsSize)
        {
            walls[0].transform.localScale += new Vector3(1, 1, 0);
            walls[0].transform.localPosition += new Vector3(0.5f, 0.5f, 0);

            walls[1].transform.localScale += new Vector3(0, 1, 1);
            walls[1].transform.localPosition += new Vector3(0, 0.5f, 0.5f);
        }

        if (walls[2].transform.position.x != -wallsSize && walls[2].transform.localScale.z != -wallsSize
            && walls[3].transform.position.x != -wallsSize && walls[3].transform.localScale.z != -wallsSize)
        {
            walls[2].transform.localScale -= new Vector3(1, 1, 0);
            walls[2].transform.localPosition -= new Vector3(0.5f, -0.5f, 0);

            walls[3].transform.localScale -= new Vector3(0, 1, 1);
            walls[3].transform.localPosition -= new Vector3(0, -0.5f, 0.5f);
        }
    }
}

第一个问题到底是墙高宽不一样。他们错过了 0.5

最后的墙值:

Wall 0: X = 49.5 Y = 49.5 Z = 0    
Wall 1: X = 0 Y = 49.5 Z = 49.5
Wall 2: X = 49.5 Y = 50 Z = 100
Wall 3: X = 100 Y = 50 Z = 49.5

我该如何修复才能使所有墙壁的高度和宽度都相同?

第二个问题是是否有更好的更短的方法来编写这段代码?

正如我所见,0.5 未命中是由于 localsize([-10,1],[1,10]) 和 localposition([-10,0],[0,10) 的起始值不同]).

我已将您的代码修改如下,希望对您有所帮助。 (我删除了所有的Y-offset,你可以随意添加回去)

public Transform prefab;
public float wallsSize;
public Vector3 wallsStartPosition;

private List<Transform> walls = new List<Transform>();

// Use this for initialization
void Start()
{
    for (int i = 0; i < 4; i++)
    {
        Transform go = Instantiate(prefab);
        go.transform.parent = transform;
        go.transform.localPosition = wallsStartPosition;
        walls.Add(go);
    }

    walls[2].transform.localPosition = new Vector3(wallsStartPosition.x + wallsSize, 0, wallsStartPosition.z + wallsSize);
    walls[3].transform.localPosition = new Vector3(wallsStartPosition.x + wallsSize, 0, wallsStartPosition.z + wallsSize);

    walls[0].transform.localPosition += new Vector3(0.5f, 0.5f, 0);
    walls[1].transform.localPosition += new Vector3(0, 0.5f, 0.5f);
    walls[2].transform.localPosition += new Vector3(0.5f, -0.5f, 0);
    walls[3].transform.localPosition += new Vector3(0, -0.5f, 0.5f);

// Update is called once per frame
void Update()
{ // transform.localScale.z != wallsSize

    if (walls[0].transform.localScale.z < wallsSize && walls[1].transform.localScale.z < wallsSize)
    {
        walls[0].transform.localScale += new Vector3(1, 1, 0);
        walls[1].transform.localScale += new Vector3(0, 1, 1);
        walls[0].transform.localPosition += new Vector3(0.5f, 0.5f, 0);
        walls[1].transform.localPosition += new Vector3(0, 0.5f, 0.5f);
    }

    if (walls[2].transform.localScale.z > -wallsSize && walls[3].transform.localScale.z > -wallsSize)
    {
        walls[2].transform.localScale -= new Vector3(1, 1, 0);
        walls[3].transform.localScale -= new Vector3(0, 1, 1);
        walls[2].transform.localPosition -= new Vector3(0.5f, -0.5f, 0);
        walls[3].transform.localPosition -= new Vector3(0, -0.5f, 0.5f);
    }
}

现在,结果是这样的: