我目前正在使用Unity和transform.rotation。问题是我有2个旋转对象作为父子。这使得孩子很奇怪地从一个盒子变成了一个盒子。 Gooing我发现transform.lossyScale应该解决我的问题,但我不知道如何实现它。
TL:DR如何实现transform.lossyscale以防止父子扩展问题。
当前代码
float currentR = transform.eulerAngles.x;
if(currentR < 30){
transform.Rotate (rotation * Time.deltaTime * 3);
}
答案 0 :(得分:0)
理想情况下,如果您不希望孩子按照父母的比例进行调整,请不要将其作为父母的孩子:P 然而。如果你必须,你可以让一个孩子扭转父母的规模(所以它将具有与父母相反的规模)
比让你的新孩子成为那个孩子的孩子:)
你可以使用这个通用脚本,把它放在它的子上它不应该在运行时轮换任何问题,即使它有一个缩放的父级:) (它将使用代码完成我上面描述的事情)
public class IgnoreParentScale : MonoBehaviour {
Transform scaleInversionParent;
void Awake () {
scaleInversionParent = new GameObject ("ScaleInversionParent").transform;
scaleInversionParent.SetParent (transform.parent);
scaleInversionParent.localPosition = Vector3.zero;
scaleInversionParent.eulerAngles = Vector3.zero;//Zero out anything but the scale
UpdateScaleInversion ();
transform.SetParent (scaleInversionParent, true);
}
void LateUpdate () {
UpdateScaleInversion (); //Only if you are changing the scale at run time.
}
void UpdateScaleInversion () {
Vector3 invertedScale = scaleInversionParent.parent.localScale;
invertedScale = new Vector3 (1f / invertedScale.x, 1f / invertedScale.y, 1f / invertedScale.z);
scaleInversionParent.localScale = invertedScale;//This scale will invert the parents scale
}
}
<强>可替换地:强>
您可以使用此脚本创建一个继承原始父级的位置和旋转的新父级,但忽略它的缩放。
public class IgnoreParentScale : MonoBehaviour {
Transform originalParent;
Transform newParent;
void Awake () {
newParent = new GameObject ("").transform;
originalParent = transform.parent;
UpdateNewParent ();
transform.SetParent (newParent);
}
public void LateUpdate () {
UpdateNewParent ();
}
void UpdateNewParent () {
newParent.transform.position = originalParent.transform.position;
newParent.transform.rotation = originalParent.transform.rotation;
}
}