При вращении одного объекта все хорошо, лимиты работают угол выставляется. НО когда два объекта соеденины в иерархию, при повороте родительского объекта дочерний объект не учитывает угол поворота родителя и сохраняет первоначальное положение в мировых координатах. Как сделать чтобы любое положение родителя считалось начальным для чайлда (углы родителя не принимались в учет)
Блин, ну если родитель повернулся на 45 градусов, то эти 45 градусов стали нулем для дочернего.
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Serva : MonoBehaviour
{
public bool ROOT;
public Serva ParentScript;
public Vector3 Axis;
public bool UseLimit;
public float Limit_MIN;
public float Limit_MAX;
public float Angle;
private float PrevParentAngle;
void Start()
{
}
void Update()
{
if (!ROOT)
{
if (Axis.x == 1)
{
if (ParentScript.Angle != PrevParentAngle)
{
Angle = Angle + ParentScript.Angle;
Debug.Log("Minimal limit is: "+Limit_MIN+". Max limit is: "+Limit_MAX);
}
if (UseLimit == true)
{
if (Angle >= Limit_MIN && Angle <= Limit_MAX)
{
transform.rotation = Quaternion.Euler(Angle, 0, 0);
}
else if (Angle < Limit_MIN)
{
transform.rotation = Quaternion.Euler(Limit_MIN, 0, 0);
}
else
{
transform.rotation = Quaternion.Euler(Limit_MAX, 0, 0);
}
}
else
{
transform.rotation = Quaternion.Euler(Angle, 0, 0);
}
PrevParentAngle = ParentScript.Angle;
}
else if (Axis.y == 1)
{
if (UseLimit == true)
{
if (Angle >= Limit_MIN && Angle <= Limit_MAX)
{
transform.rotation = Quaternion.Euler(0, Angle, 0);
}
else if (Angle < Limit_MIN)
{
transform.rotation = Quaternion.Euler(0, Limit_MIN, 0);
}
else
{
transform.rotation = Quaternion.Euler(0, Limit_MAX, 0);
}
}
else
{
transform.rotation = Quaternion.Euler(0, Angle, 0);
}
}
else if (Axis.z == 1)
{
if (UseLimit == true)
{
if (Angle >= Limit_MIN && Angle <= Limit_MAX)
{
transform.rotation = Quaternion.Euler(0, 0, Angle);
}
else if (Angle < Limit_MIN)
{
transform.rotation = Quaternion.Euler(0, 0, Limit_MIN);
}
else
{
transform.rotation = Quaternion.Euler(0, 0, Limit_MAX);
}
}
else
{
transform.rotation = Quaternion.Euler(0, 0, Angle);
}
}
}
else
{
transform.rotation = Quaternion.Euler(0, 0, 0);
}
}
}
using System.Collections.Generic;
using UnityEngine;
public class Serva : MonoBehaviour
{
public bool ROOT;
public Serva ParentScript;
public Vector3 Axis;
public bool UseLimit;
public float Limit_MIN;
public float Limit_MAX;
public float Angle;
private float PrevParentAngle;
void Start()
{
}
void Update()
{
if (!ROOT)
{
if (Axis.x == 1)
{
if (ParentScript.Angle != PrevParentAngle)
{
Angle = Angle + ParentScript.Angle;
Debug.Log("Minimal limit is: "+Limit_MIN+". Max limit is: "+Limit_MAX);
}
if (UseLimit == true)
{
if (Angle >= Limit_MIN && Angle <= Limit_MAX)
{
transform.rotation = Quaternion.Euler(Angle, 0, 0);
}
else if (Angle < Limit_MIN)
{
transform.rotation = Quaternion.Euler(Limit_MIN, 0, 0);
}
else
{
transform.rotation = Quaternion.Euler(Limit_MAX, 0, 0);
}
}
else
{
transform.rotation = Quaternion.Euler(Angle, 0, 0);
}
PrevParentAngle = ParentScript.Angle;
}
else if (Axis.y == 1)
{
if (UseLimit == true)
{
if (Angle >= Limit_MIN && Angle <= Limit_MAX)
{
transform.rotation = Quaternion.Euler(0, Angle, 0);
}
else if (Angle < Limit_MIN)
{
transform.rotation = Quaternion.Euler(0, Limit_MIN, 0);
}
else
{
transform.rotation = Quaternion.Euler(0, Limit_MAX, 0);
}
}
else
{
transform.rotation = Quaternion.Euler(0, Angle, 0);
}
}
else if (Axis.z == 1)
{
if (UseLimit == true)
{
if (Angle >= Limit_MIN && Angle <= Limit_MAX)
{
transform.rotation = Quaternion.Euler(0, 0, Angle);
}
else if (Angle < Limit_MIN)
{
transform.rotation = Quaternion.Euler(0, 0, Limit_MIN);
}
else
{
transform.rotation = Quaternion.Euler(0, 0, Limit_MAX);
}
}
else
{
transform.rotation = Quaternion.Euler(0, 0, Angle);
}
}
}
else
{
transform.rotation = Quaternion.Euler(0, 0, 0);
}
}
}