C#中如何实现对象吸附到可旋转网格的功能
旋转网格下的对象吸附实现方案
原代码仅在世界坐标系下对坐标做取整计算,未匹配网格自身的旋转属性,当网格发生旋转后,世界坐标轴与网格局部坐标轴不重合,就会出现吸附偏移。
正确的实现逻辑是通过坐标空间转换,在网格局部空间完成吸附计算后再转回世界空间,具体实现代码如下:
// 先获取网格基底的Transform组件,此处假设你已经赋值给gridTransform变量 Transform gridTransform = 你的网格基底对象.GetComponent<Transform>(); // 1. 将选中对象的世界坐标转换为网格的局部坐标 Vector3 localPos = gridTransform.InverseTransformPoint(selected.position); // 2. 在局部坐标系下执行网格吸附计算 float localX = Mathf.Round(localPos.x / gridScale) * gridScale; float localY = Mathf.Round(localPos.y / gridScale) * gridScale; Vector3 snappedLocalPos = new Vector3(localX, localY, localPos.z); // 3. 将吸附后的局部坐标转换回世界坐标 Vector3 finalGridPos = gridTransform.TransformPoint(snappedLocalPos);
上述逻辑同时兼容带缩放的网格场景,无需额外调整适配缩放参数
内容的提问来源于stack exchange,提问作者nullFoo
相关产品推荐
相关产品推荐

