Unity中如何基于另一游戏对象调整旋转,实现AR棋盘网格对齐?
问题解决方案
核心问题原因
你当前生成网格时直接在世界空间计算顶点坐标,仅匹配了棋盘的放置位置,未适配棋盘放置时的旋转参数,因此无论怎么单独调整方格旋转都无法对齐。
具体修改步骤
1. 补全获取棋盘的旋转参数
放置棋盘时使用了placementPose.rotation叠加X轴-90度旋转,生成网格时需要同步使用该旋转值:
private float yAdjust = 0F; // 提前获取放置脚本,同时拿到位置和旋转参数 private TapToPlaceObject placeScript = GameObject.Find("Interaction").GetComponent<TapToPlaceObject>(); private Vector3 boardCenter = placeScript.placementPose.position; // 和放置棋盘的旋转参数完全保持一致 private Quaternion boardRotation = placeScript.placementPose.rotation * Quaternion.Euler(-90f, 0f, 0f);
2. 调整网格生成逻辑,改用局部坐标计算顶点
不要直接将世界坐标叠加到顶点上,将所有方格放在同一个父物体下,统一调整父物体的位置和旋转对齐棋盘:
private void GenerateSquares(float squareSize) { // 仅保留局部坐标的中心偏移,不叠加世界坐标 adjust = new Vector3(-4 * squareSize, 0, -4 * squareSize); // 统一设置父物体的位置、旋转和棋盘完全对齐,y轴偏移可在此处调整 transform.position = boardCenter + new Vector3(0, yAdjust, 0); transform.rotation = boardRotation; squares = new GameObject[8,8]; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { squares[i, j] = CreateSquare(squareSize,i,j); } } }
3. 优化单个方格的生成逻辑
移除顶点中的世界坐标叠加,补全法线计算避免光照异常:
private GameObject CreateSquare(float squareSize, int i, int j) { GameObject square = new GameObject(string.Format("{0},{1}", i, j)); square.transform.parent = transform; Vector3[] vertices = new Vector3[4]; vertices[0] = new Vector3(i * squareSize, 0, j * squareSize) + adjust; vertices[1] = new Vector3(i * squareSize, 0, (j + 1) * squareSize) + adjust; vertices[2] = new Vector3((i + 1) * squareSize, 0, j * squareSize) + adjust; vertices[3] = new Vector3((i + 1) * squareSize, 0, (j + 1) * squareSize) + adjust; int[] triangles = new int[] { 0, 1, 2, 1, 3, 2 }; Mesh mesh = new Mesh(); square.AddComponent<MeshFilter>().mesh = mesh; square.AddComponent<MeshRenderer>().material = squareMaterial; mesh.vertices = vertices; mesh.triangles = triangles; mesh.RecalculateNormals(); // 新增法线计算,修复光照显示问题 square.AddComponent<BoxCollider>(); return square; }
验证说明
修改后所有方格的坐标都基于父物体的局部空间计算,父物体的位置、旋转和放置的棋盘完全一致,网格会自动适配棋盘的角度和位置,不需要再单独调整每个方格的旋转。
内容的提问来源于stack exchange,提问作者Hiddennord
相关产品推荐
相关产品推荐

