我正在尝试为我正在开发的一款游戏制作一个半过程生成的unity地图。在游戏中,当玩家移动到每个方向(北,南,东,西,NWest,NEast,SWest,SEast)时,方块平台会在每个方向上产生。这些平台包含一个平坦的地形作为地面(所以我可以在上面绘制纹理等等)。为了给游戏一些多样性,我打算在这些平台产卵时随机选择一个旋转(90度,180度和270度)。问题是,默认情况下,地形的轴心点并不在它的中心,导致了一个非常尴尬的结果,在这种情况下,是破坏性的结果。我试图将其子代到一个中心带有轴心的空游戏对象,但我得到了相同的结果。有谁知道解决这个问题的方法吗?我知道这不是一个编码问题,但它仍然是一个技术问题。我到处寻找,常见的解决方案是将其子代为一个空的,但正如我所说的,它在这种情况下不起作用,除非我遗漏了什么。一如既往,提前感谢您的耐心和关注。瑞皮雷斯
注意:这是我的旋转脚本,如果有什么我可以通过修改它来实现的话:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AutoRotate : MonoBehaviour
{
Quaternion rot1;
private int a;
private void Awake()
{
a = Random.Range(0, 4);
rot1 = transform.rotation;
}
// Start is called before the first frame update
void Start()
{
switch(a)
{
case 0: transform.rotation = rot1;
Debug.Log("case 0");
break;
case 1: rot1 = Quaternion.AngleAxis(90, Vector3.up);
transform.rotation = rot1;
Debug.Log("case 1");
break;
case 2: rot1 = Quaternion.AngleAxis(180, Vector3.up);
transform.rotation = rot1;
Debug.Log("case 2");
break;
case 3:
rot1 = Quaternion.AngleAxis(270, Vector3.up);
transform.rotation = rot1;
Debug.Log("case 3");
break;
}
}
}编辑:添加了几张图片,以便更好地描述问题。


发布于 2020-07-14 04:29:22
我最终得到了一个“创可贴”解决方案,为地形添加了一个localPosition值来纠正旋转行为:
Quaternion rot1;
private int a;
private void Awake()
{
a = Random.Range(0, 4);
rot1 = transform.rotation;
}
// Start is called before the first frame update
void Start()
{
switch(a)
{
case 0: transform.rotation = rot1;
Debug.Log("case 0");
break;
case 1: rot1 = Quaternion.AngleAxis(90, Vector3.up);
transform.rotation = rot1;
transform.GetChild(0).transform.localPosition = new Vector3(transform.GetChild(0).transform.localPosition.x + 100, transform.GetChild(0).transform.localPosition.y, transform.GetChild(0).transform.localPosition.z);
Debug.Log("case 1");
break;
case 2: rot1 = Quaternion.AngleAxis(180, Vector3.up);
transform.rotation = rot1;
transform.GetChild(0).transform.localPosition = new Vector3(transform.GetChild(0).transform.localPosition.x + 100, transform.GetChild(0).transform.localPosition.y, transform.GetChild(0).transform.localPosition.z +100);
Debug.Log("case 2");
break;
case 3:
rot1 = Quaternion.AngleAxis(270, Vector3.up);
transform.rotation = rot1;
transform.GetChild(0).transform.localPosition = new Vector3(transform.GetChild(0).transform.localPosition.x, transform.GetChild(0).transform.localPosition.y, transform.GetChild(0).transform.localPosition.z+100);
Debug.Log("case 3");
break;
}
}注意:层次结构中的第一个子节点(索引为0的子节点)显然是地形gameObject。
https://stackoverflow.com/questions/62438377
复制相似问题