Unity3D (5.3.5) 贴花实例化错误旋转
Unity3D (5.3.5) decals instantiate with wrong rotation
我仍然认为自己是 Unity 和 C# 方面的初学者,所以很抱歉,如果这很容易解决,但我们将不胜感激。
我想做什么:
玩家可以与世界中的立方体互动,我想给他们反馈。为此,我有一个平面的预制件,上面应用了手印的纹理。交互发生在光线投射中,手印应该在命中位置实例化。
这是我为此编写的脚本:
Ray ray = new Ray (Camera.main.transform.position, Camera.main.transform.forward);
RaycastHit hitInfo;
if (Physics.Raycast (ray, out hitInfo, usabilityRange)) {
Vector3 hitPoint = hitInfo.point;
GameObject go = hitInfo.collider.gameObject;
hasInteract h = go.GetComponent<hasInteract> ();
if (h != null) {
h.toggleText ();
if (interactPrefab != null) {
Quaternion rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
Instantiate (interactPrefab, hitPoint, rotation);
}
}
}
出了什么问题:
我在这个主题上找到的几乎所有教程都使用了四元数,但是当我在常规立方体上使用它时,它会在每个立方体面上以不同的旋转实例化贴花(例如,手指在一个面上朝左并朝上在另一个,等等)。现在,我不知道如何计算旋转,以便无论从哪个方向(除了顶部)激活立方体,手印的手指始终朝上。
再次感谢您阅读这面文字墙!
您 运行 遇到的问题是您的旋转方法具有额外的自由度。可以将其视为能够 "spin" 沿任意方向围绕矢量旋转,同时旋转到其他两个轴上的位置。要绕过它,您可以尝试使用不同的四元数函数:Quaternion.LookRotation。这个定义了一个向上轴和一个向前的方向,使您能够指定您正在寻找的方向。
我仍然认为自己是 Unity 和 C# 方面的初学者,所以很抱歉,如果这很容易解决,但我们将不胜感激。
我想做什么:
玩家可以与世界中的立方体互动,我想给他们反馈。为此,我有一个平面的预制件,上面应用了手印的纹理。交互发生在光线投射中,手印应该在命中位置实例化。
这是我为此编写的脚本:
Ray ray = new Ray (Camera.main.transform.position, Camera.main.transform.forward);
RaycastHit hitInfo;
if (Physics.Raycast (ray, out hitInfo, usabilityRange)) {
Vector3 hitPoint = hitInfo.point;
GameObject go = hitInfo.collider.gameObject;
hasInteract h = go.GetComponent<hasInteract> ();
if (h != null) {
h.toggleText ();
if (interactPrefab != null) {
Quaternion rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
Instantiate (interactPrefab, hitPoint, rotation);
}
}
}
出了什么问题:
我在这个主题上找到的几乎所有教程都使用了四元数,但是当我在常规立方体上使用它时,它会在每个立方体面上以不同的旋转实例化贴花(例如,手指在一个面上朝左并朝上在另一个,等等)。现在,我不知道如何计算旋转,以便无论从哪个方向(除了顶部)激活立方体,手印的手指始终朝上。
再次感谢您阅读这面文字墙!
您 运行 遇到的问题是您的旋转方法具有额外的自由度。可以将其视为能够 "spin" 沿任意方向围绕矢量旋转,同时旋转到其他两个轴上的位置。要绕过它,您可以尝试使用不同的四元数函数:Quaternion.LookRotation。这个定义了一个向上轴和一个向前的方向,使您能够指定您正在寻找的方向。