实例化GameObject后旋转异常问题求助
Unity实例化物体旋转异常问题修复
问题根因
你直接将欧拉角Y值传入Quaternion的构造函数是错误的——Quaternion构造函数的参数不是欧拉角,而是四元数的x/y/z/w分量。这种写法会生成无效的四元数,导致所有实例化物体的旋转出现不符合预期的结果(比如全部变成180度)。
修复方案
使用Unity提供的Quaternion.Euler()方法,将欧拉角转换为正确的四元数。这个方法会自动处理欧拉角到四元数的转换逻辑,保证旋转值准确生效。
修改后的关键代码
只需要修改SpawnATM函数中的四元数创建部分:
public void SpawnATM(int ATM, GameObject pr) { UnityEngine.Vector3 ATMPos = new UnityEngine.Vector3(MazePos[ATM,0], MazePos[ATM,1], MazePos[ATM,2]); // 替换原构造方式,用Euler方法生成对应Y轴旋转的四元数 UnityEngine.Quaternion CoinQ = UnityEngine.Quaternion.Euler(0, MazePos[ATM,3], 0); Instantiate(pr, ATMPos, CoinQ); }
补充说明
你数组中存储的是Y轴旋转的欧拉角数值,Quaternion.Euler(0, 角度值, 0)正好对应绕Y轴的旋转逻辑,完全匹配你的需求。之前用具体数值测试时可能巧合避开了构造方式的错误,但用数组取值时就暴露了核心问题。
内容的提问来源于stack exchange,提问作者FKso
相关产品推荐
相关产品推荐

