我正在制作2D等距城市建筑游戏。世界分为瓷砖,您可以单击一个按钮以开始放置建筑物。该建筑物将跟随您的鼠标在地图上,并在您单击另一个按钮时将其放置(工作正常)。但是,如果要将(新)建筑物放置在另一(旧)建筑物上,则该(旧)建筑物需要被销毁。
所有建筑物都具有Ridgidbody2D(运动学)和Boxcollider2D。
Picture: The setup for the Building
Ps:这是我在这个论坛上的第一个问题,如果我可以改善我的问题,请告诉我。
private bool Place;
public bool Destr;
Vector2 pz;
private SpriteRenderer spriteRenderer;
public void Awake()
{
Place = true;
}
public void Update()
{
if (Place)
{
pz = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Mathf.RoundToInt(pz.x) % 2 != 0)
pz.x = Mathf.RoundToInt(pz.x) + 1;
if (Mathf.RoundToInt(pz.x) % 4 == 0)
{
pz.x = Mathf.RoundToInt(pz.x);
if (Mathf.RoundToInt(pz.y) % 2 == 0)
{
pz.y = Mathf.RoundToInt(pz.y) + 1;
}
else
pz.y = Mathf.RoundToInt(pz.y);
}
else
{
pz.x = Mathf.RoundToInt(pz.x);
if (Mathf.RoundToInt(pz.y) % 2 == 0)
{
pz.y = Mathf.RoundToInt(pz.y);
}
else
pz.y = Mathf.RoundToInt(pz.y) + 1;
}
transform.position = pz;
}
if (Input.GetButtonDown("Place2") && Place)
{
Place = false;
float IsoX = Mathf.Abs(pz.x) / 2;
float IsoY = (pz.y - 1 - IsoX) / 2;
spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sortingOrder = -(20 * Mathf.RoundToInt(IsoY) + Mathf.RoundToInt(IsoX)) + 1;
// New code
for (var i = 0; i < Obj.Count; i++)
{
Destroy(Obj[i]);
}
}
}
void OnCollisionEnter2D(Collision2D other)
{
if(Place)
{
Obj.Add(other.gameObject);
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (Place)
{
Obj.Remove(other.gameObject);
}
}