为什么在更新时动态创建 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);
}
}
现在,结果是这样的:
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);
}
}
现在,结果是这样的: