我正在编写一个应该代表循环网格的脚本。随着层距中心的距离的增加,各层中的物体数量成比例增加,因此每个瓷砖之间的距离应该保持不变。我试着通过旋转鼠标世界位置来计算每个瓷砖的近似值,但这本身就导致了一些问题,比如在鼠标到达之前,围绕着开始的角度抽搐,移动物体。这是一个完全不好的方法还是我遗漏了什么?以下是代码:
customGrid.cs
using UnityEngine;
public class customGrid : MonoBehaviour
{
[SerializeField] private Camera mainCamera;
[SerializeField] private LayerMask layerMask; // this is a simple LayerMask attached to a simple Plane object
public GameObject structure;
Vector3 truePos;
public int maxLayers = 1;
public int minLayers = 0;
public float objectSize = 1.5f;
public float radius = 0f;
void LateUpdate()
{
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit raycastHit, float.MaxValue, layerMask))
{
float angleRadian = Mathf.Atan2(raycastHit.point.x, raycastHit.point.z);
float cursorDistanceFromOrigin = Vector3.Distance(Vector3.zero, new Vector3(raycastHit.point.x, 0, raycastHit.point.z));
var circumference = 2 * Mathf.PI * radius;
var quantization = 360 / (circumference / objectSize);
float objectDistanceFromOrigin = Mathf.Floor(cursorDistanceFromOrigin / objectSize) * objectSize;
var maxDistance = objectSize * maxLayers;
var minDistance = objectSize * minLayers;
objectDistanceFromOrigin = Mathf.Clamp(objectDistanceFromOrigin, minDistance, maxDistance);
radius = objectDistanceFromOrigin;
if (radius < 1) return;
var degree = angleRadian * Mathf.Rad2Deg;
degree = Mathf.Round(degree / quantization) * quantization;
angleRadian = degree * Mathf.Deg2Rad;
truePos.x = Mathf.Sin(angleRadian) * radius;
truePos.y = 0;
truePos.z = Mathf.Cos(angleRadian) * radius;
RepositionObject();
}
}
private void RepositionObject()
{
structure.transform.position = truePos;
var dir = truePos - Vector3.zero;
dir = Vector3.Normalize(dir);
structure.transform.rotation = Quaternion.LookRotation(dir);
}
}

我所期待的是这样一个网格:

发布于 2021-09-27 21:49:00
如果您希望瓷砖之间的距离保持不变,那么您需要从一组已知的倾斜物中选择。
最简单的工作是一个六角瓷砖。除非你有充分的理由不这么做,我建议你这么做。
但是https://en.wikipedia.org/wiki/Tessellation也包括其他的,比如https://en.wikipedia.org/wiki/Voderberg_tiling,它以你想要的方式旋转(代价是非常非矩形)。
如果你愿意放松距离规则,你可以很容易地在形状变化的地方产生很多倾斜。如果你使宽度1.0471975512倍的高度,并使你的“瓷砖”成圆形的部分,你将得到非常接近近似正方形,每一层比前一层多6个。你可以决定你怎么做。
请注意,除了常规的瓦片外,其他任何东西,如六角瓷砖,都会使做任何一种物理工作变得困难。随着游戏的发展,这将成为你的一个问题。
https://stackoverflow.com/questions/69353072
复制相似问题