unity3d 导航网格代理更改我的gameobject的位置

oxiaedzo  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(137)

我在游戏运行后产卵我的动物。当我把导航网格代理添加到我的动物预制件时,它变成了旧的位置。
下面是我的代码:

public class GeneralScript : MonoBehaviour
{
public GameObject Deer;
private int deernum1 = 0
private int num;


private bool cond1 = true;
private bool cond2 = true;

void Start()
{
    StartCoroutine(spawnanimalsatposition1());
    
    

}

IEnumerator spawnanimalsatposition1()
{
    yield return new WaitForSeconds(3f);
    while (cond1)
    {
        Vector3 position1 = new Vector3(Random.Range(300,495), 1, Random.Range(5, 495));
        position1.y = Terrain.activeTerrain.SampleHeight(position1) + 
        Terrain.activeTerrain.GetPosition().y;                                                                
        position1.y += 1.2f;
        Instantiate(Deer, position1, Quaternion.Euler(-90, 0, 0));
        
        deernum1++;
        if (deernum1 > 6)
        {
            cond1 = false;
        }

    }
}

我的问题示例:NormalBroken显示器
有没有人知道为什么会发生这种情况,以及如何解决它。

uqcuzwp8

uqcuzwp81#

在“正常”情况下,使用Z-axis而不是首选的Y-axis作为对象的向上旋转。
当你示例化你的预制件时,你也应用了一个欧拉角偏移(-90,0,0)。这是在x-axis上偏移你的Transform-90度。
为了解决这个问题,你可以将欧拉角设置为(0,0,0),或者更好的是使用Quaternion.identity使对象与世界坐标轴对齐。我假设NavMesh正在尝试归一化这个偏移,所以理想情况下你应该旋转你的动物,使z-axis(蓝色)“向前”或脸,而y-axis(绿色)向上

相关问题