unity Rotate between min and max distance

守給你的承諾、 提交于 2019-12-10 20:48:26

问题


I'm trying to make it possible to drag an object. This object can only rotate so much. (Similair to a door).

Here is the code abit edited that rotates an object which works. I have 2 vectors for maxrotation and minrotation.

This code will be called whenever the user is dragging the interactible object. (like update but only when dragged)

        if (GestureManager.Instance.IsNavigating &&
    HandsManager.Instance.FocusedGameObject == gameObject)
        {
            //speed and navigiation of rotation
            float rotationFactor;
            rotationFactor = ManipulationManager.Instance.ManipulationPosition.y * RotationSensitivity;
            totransform.Rotate(new Vector3(rotationFactor, 0, 0));
        }

It would be great if I could use an if statement here. And I tried quite some things but it's still not working.

As stated the code paste here works. The object should be dragable but only up to a certain points.

totransform is the transform that will be rotated

Any ideas would be great and most appreciated.

Kind regards.


回答1:


I think you want to look at eulerAngles. Check the values you're getting then set an if-statement before doing the rotation. This is a sample code for you to find the values you want:

if (GestureManager.Instance.IsNavigating &&
    HandsManager.Instance.FocusedGameObject == gameObject)
{
    //speed and navigiation of rotation
    float rotationFactor = ManipulationManager.Instance.ManipulationPosition.y * RotationSensitivity;

    Debug.Log(totransform.eulerAngles);
    if (totransform.eulerAngles.x < 100) {
        totransform.Rotate(new Vector3(rotationFactor, 0, 0));
    }
}



回答2:


So here is the solution that worked for me. First I declare the movement variable (not seen down below, which is 2 in this case). Then I track the distance covered and put a limit on that.

Of course there are some improvements to this code like use movement instead of 2. But because of time constraints I didn't do it.

    if (GestureManager.Instance.IsNavigating &&
    HandsManager.Instance.FocusedGameObject == gameObject)
        {

                //here we get the movement direction and set it in movement.
                if (GestureManager.Instance.NavigationPosition.y > 0)
                {
                    movement = 2;
                }
                else if (GestureManager.Instance.NavigationPosition.y < 0)
                {
                    movement = -2;
                }


            //the first part is false if we reach higher then maxdistance and the movement is going up
            //the second part is false if we reach the lower distance and the movement is going down.
            if ((!(distance > maxdistance.x) || movement < 0) && ((!(distance < mindistance.x) || movement > 0)))
                {
                    //here we add the movement to the distance so we know if it gets closer or further
                    distance += movement;
                    //here we rotate
                    totransform.Rotate(new Vector3(movement, 0, 0));
                }
        }


来源:https://stackoverflow.com/questions/42277113/unity-rotate-between-min-and-max-distance

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!