如何在Unity中移动物体
How to move an object in Unity
大家好,我尝试制作一个城市建设游戏,这个想法非常简单,实际上实例化一个建筑物,然后用鼠标移动它们,然后点击放置按钮并放置。
问题是,如果另一座建筑物的对撞机完全包围了我建造的建筑物的对撞机,我将无法移动新建筑物。
我可能可以用图片更好地解释。
Issue 1
第一张图片是我的新建筑,你可以看到对撞机限制,第二张图片是我已经放置的旧建筑。我了解问题,但无法解决。
这是我的对象拖动代码
private void OnMouseDrag()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo, 1000f,(1 << LayerMask.NameToLayer("Ground"))))
{
Debug.Log(hitInfo.transform.name);
transform.position = SnapToGrid(hitInfo.point);
}
}
private Vector3Int SnapToGrid(Vector3 pos)
{
Vector3 tempPos = pos;
Vector3Int snappedPos;
snappedPos = new Vector3Int(Mathf.RoundToInt(tempPos.x), Mathf.RoundToInt(tempPos.y), Mathf.RoundToInt(tempPos.z));
return snappedPos;
}
提前感谢您的帮助
如果我答对了你的问题,我相信你可以通过在移动新建筑物时启用先前放置的建筑物碰撞器的“是触发器”选项来解决问题。在对象中启用此选项可以让其他对象在发生碰撞时通过它。
大家好,我尝试制作一个城市建设游戏,这个想法非常简单,实际上实例化一个建筑物,然后用鼠标移动它们,然后点击放置按钮并放置。 问题是,如果另一座建筑物的对撞机完全包围了我建造的建筑物的对撞机,我将无法移动新建筑物。 我可能可以用图片更好地解释。 Issue 1 第一张图片是我的新建筑,你可以看到对撞机限制,第二张图片是我已经放置的旧建筑。我了解问题,但无法解决。 这是我的对象拖动代码
private void OnMouseDrag()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo, 1000f,(1 << LayerMask.NameToLayer("Ground"))))
{
Debug.Log(hitInfo.transform.name);
transform.position = SnapToGrid(hitInfo.point);
}
}
private Vector3Int SnapToGrid(Vector3 pos)
{
Vector3 tempPos = pos;
Vector3Int snappedPos;
snappedPos = new Vector3Int(Mathf.RoundToInt(tempPos.x), Mathf.RoundToInt(tempPos.y), Mathf.RoundToInt(tempPos.z));
return snappedPos;
}
提前感谢您的帮助
如果我答对了你的问题,我相信你可以通过在移动新建筑物时启用先前放置的建筑物碰撞器的“是触发器”选项来解决问题。在对象中启用此选项可以让其他对象在发生碰撞时通过它。