Предельное вращение шарнираСоединение между углами - PullRequest
0 голосов
/ 21 октября 2018

Мой сценарий работает почти идеально, но мне просто нужно зафиксировать это число, и я не могу понять, как это сделать.

Упрощенная версия ...

public HingeJoint doorHinge;
public float rotatedoor = 0.0f;  // Limit this value, min 0 max 120

void Update () {

       float h = Input.GetAxis("Mouse X");
       rotatedoor = rotatedoor + h;


        JointSpring doorSpring = Door.spring;
        doorSpring.targetPosition = rotatedoor;
        Door.spring = doorSpring;
}

Я попытался добавить минимальное и максимальное значения с плавающей запятой и затем использовать

rotatedoor = Mathf.Clamp(rotatedoor, minRot, maxRot);

, но не повезло.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Вы получили ответ о том, как зажать его, но вам действительно не нужно этого делать.

Похоже, вы хотите установить предел для HingeJoint.У этого есть встроенное свойство, чтобы сделать это со структурой JointLimits, и это то, что вы должны использовать.

Что-то вроде ниже:

public HingeJoint doorHinge;
public float rotatedoor = 0.0f;  // Limit this value, min 0 max 120

void Update()
{
    //Get the current the limit
    JointLimits limits = doorHinge.limits;

    //Set the limit to that copy 
    limits.min = 0;
    limits.max = 120;

    limits.bounciness = 0;
    limits.bounceMinVelocity = 0;

    //Apply the limit since it's a struct
    doorHinge.limits = limits;

    JointSpring doorSpring = doorHinge.spring;
    doorSpring.targetPosition = rotatedoor;
    doorHinge.spring = doorSpring;
}
0 голосов
/ 21 октября 2018

Есть несколько простых способов сделать это, поэтому я перечислю те, которые я вижу ниже.

rotatedoor = Math.Max( 0f, Math.Min( 120f, rotatedoor ) );

В качестве альтернативы, вы можете использовать троичное выражение :

rotatedoor = (rotatedoor < 0f) ? 0f : (rotatedoor > 120f) ? 120f : value;

Или вы можете использовать Unity3D Mathf.clamp () :

rotatedoor = Mathf.clamp( rotatedoor, 0.0f, 120f );

Возможно, есть и другие способы сделать это.Мне было бы интересно узнать, существует ли более эффективный метод, поскольку все эти методы требуют работы в логике update, которая сама по себе не является наиболее эффективным способом решения проблем.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...