我有一个浮动游戏对象(brickRot),通过光线投射查看其下方的物体,然后根据brickRot的旋转更改该对象的y位置(floorY)。但是,我无法将轮换转换为改变Y位置的有用指标。我希望brickRot的当前旋转等于floorY的y位置,然后只相对于brickRot的旋转进行更改(如果这有意义的话)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FloorRotation : MonoBehaviour {
private float brickRot;
private float floorY;
void Update () {
brickRot = transform.rotation.y;
RaycastHit hit;
Ray floorRay = new Ray(transform.position, Vector3.down);
if(Physics.Raycast(floorRay, out hit)) {
if(hit.collider.tag == "floor") {
floorY = hit.transform.position.y;
floorY = floorY + brickRot;
Debug.Log(floorY);
}
}
}
}
将brickRot视为放在桌子上的盘子,当你旋转盘子时,你可以改变桌子的y位置(如果这个类比使它更容易混淆)。我使用光线投影的原因是因为有多个"表"砖可以找到,它需要区分它们。如果有人知道如何使这更容易,我会永远感激!
答案 0 :(得分:1)
您获得的旋转值是Quaternion角度,而不是常见的360度欧拉旋转。 Unity或任何其他游戏引擎仅使用Euler表示我们,但它从不在内部使用它进行任何类型的旋转计算。
我建议不要深入了解四元数。但相反,想想你还能做到的其他方法。
对于合适的指标,添加一个儿童游戏对象,在x或y或z中旋转90(检查这一点,这取决于你如何定位你的父母)和一些距离父对象的游戏对象。现在,当您旋转砖块时,子项将在父项周围循环移动后自动移动到y。您可以使用孩子的Y作为更新floorY的指标。
答案 1 :(得分:0)
使用" eulerAngles"相反,它会将四元数转换为vector3 那么你使用vector3的角度函数得到一些浮点数,如果你需要更大/更小的比例,你可以将浮点数与另一个值相乘
brickRot = angle = Vector3.Angle(transform.rotation.eulerAngles, transform.forward);