मेरे पास एकता में एक गेम ऑब्जेक्ट है जिसे मैं अपने वीआर नियंत्रक का उपयोग करके घुमाने में सक्षम होना चाहता हूं। मैं निम्नलिखित करके इसे प्राप्त कर सकता हूं ...

bool triggerClicked = false;
Transform rightHand = Player.instance.rightHand.transform;
 
void Update () {
    if (triggerClicked) {
         transform.eulerAngles = rightHand.eulerAngles;
    }           
{

लेकिन समस्या यह है कि जब मैं ट्रिगर दबाता हूं और फिर इरादा के अनुसार काम करता है तो मैं अपने नियंत्रक के वर्तमान रोटेशन के लिए शुरू में स्नैप को घुमाना चाहता हूं। मुझे इसके बजाय वस्तु के प्रारंभिक घूर्णन के सापेक्ष स्थानांतरित करने की आवश्यकता है। ऐसा करने का सही तरीका क्या है?

-1
aadu 18 जिंदा 2021, 19:09

1 उत्तर

सबसे बढ़िया उत्तर

उसे हल कर लिया। जब ट्रिगर को पहली बार क्लिक किया जाता है तो आपको कुछ प्रारंभिक चतुर्भुजों को कैप्चर करने की आवश्यकता होती है और फिर सापेक्ष अंतरों की गणना करके उन्हें लागू करना होता है। यह प्रारंभिक स्नैपिंग से रोटेशन समस्या को रोकता है।

  private bool triggerClicked = false;
  private Transform rightHand = Player.instance.rightHand.transform;

  private Quaternion initialObjectRotation;
  private Quaternion initialControllerRotation;

  private bool set = false;

 void Update () {
     if (triggerClicked) {

         if(set == false)
            {
                initialObjectRotation= transform.rotation;
                initialControllerRotation = rightHand.rotation;
                set = true;
            }

            Quaternion controllerAngularDifference = initialControllerRotation * Quaternion.Inverse(rightHand.rotation);
            transform.rotation = controllerAngularDifference * initialObjectRotation;
     }         
     else
     {
         set = false;
     }
 {
1
AzzyDude 18 जिंदा 2021, 20:32