Unity中transform.LookAt实例化对象朝向偏离90度问题求助
问题解决:LookAt后攻击预制体朝向偏离90度
这种情况大概率是预制体自身的前向轴与Unity默认前向轴不匹配导致的——Unity的LookAt方法默认会让对象的Z轴指向目标,但你的攻击预制体可能是用X轴或Y轴作为视觉上的“前方向”。
给你两个直接的解决思路:
方法1:修改预制体自身朝向(推荐)
在Unity编辑器中打开攻击预制体,选中模型对象,在Inspector面板调整旋转角度,让模型的“正面”朝向与对象的Z轴方向一致(可通过Scene视图的坐标轴图标确认)。保存预制体后,再用原代码实例化调用LookAt,朝向就会正确。
方法2:代码中修正旋转偏移
如果不想修改预制体,可以在调用LookAt后,给对象的旋转叠加一个90度的偏移,根据实际偏离方向调整轴:
GameObject spawnedThunderingStormAttack = Instantiate(thunderingStormAttack, transform.position, Quaternion.identity ); spawnedThunderingStormAttack.transform.LookAt(Player.Instance.transform.position); // 假设是绕Y轴偏离90度,根据实际情况替换轴和角度 spawnedThunderingStormAttack.transform.rotation *= Quaternion.Euler(0, 90, 0);
或者也可以直接在实例化时计算正确的旋转,跳过默认的Quaternion.identity:
var targetPos = Player.Instance.transform.position; var direction = targetPos - transform.position; // 这里的欧拉角偏移根据你的预制体朝向调整 var targetRotation = Quaternion.LookRotation(direction) * Quaternion.Euler(0, 90, 0); GameObject spawnedThunderingStormAttack = Instantiate(thunderingStormAttack, transform.position, targetRotation);
另外你之前尝试的方向向量加减、归一化对这个问题没用,因为LookAt内部会自动计算方向,核心问题还是轴的匹配。
内容的提问来源于stack exchange,提问作者Svak
相关产品推荐
相关产品推荐

