मैं खेल वस्तु की तरह एक अर्धवृत्त जो मैं एक खाली खेल वस्तु (SCircle) में दो चाप डालने और 15 ° (बाएं के लिए घूर्णन द्वारा बनाई गई है का उपयोग कर एक खास कोण के लिए एक बच्चे वस्तु घूर्णन, जबकि एक पैरेंट ऑब्जेक्ट को घुमाने के लिए आर्क) और -15 डिग्री (दाएं चाप के लिए) जैसा कि नीचे देखा गया है।कैसे coroutines
SCircle
दो मानों Left
और Right
(SCircle
-45 ° करने के लिए घूमता है) नीचे चित्र में दिखाए के रूप में (45 ° SCircle घूमता है) के साथ एक Orientation
enum है।
मैं निम्नलिखित coroutine का उपयोग झुकाव के बीच SCircle
स्थानांतरित करने के लिए।
IEnumerator RotateArc(GameObject arcGO, Vector3 byAngles, float inTime)
{
Quaternion fromAngle = arcGO.transform.rotation ;
Quaternion toAngle = Quaternion.Euler (arcGO.transform.eulerAngles);
if (rightArc.arcOrientation == Arc.Orientation.Down) {
toAngle = Quaternion.Euler (arcGO.transform.eulerAngles + byAngles);
rightArc.arcOrientation = Arc.Orientation.Up;
}
else if (rightArc.arcOrientation == Arc.Orientation.Down) {
toAngle = Quaternion.Euler (arcGO.transform.eulerAngles - byAngles);
rightArc.arcOrientation = Arc.Orientation.Up;
}
for(float t = 0f ; t <= 1f ; t += Time.deltaTime/inTime)
{
arcGO.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t) ;
yield return null ;
}
arcGO.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, 1);
}
IEnumerator RotateLeftOrRight(Vector3 byAngles, float inTime)
{
Quaternion fromAngle = gameObject.transform.rotation ;
Quaternion toAngle = Quaternion.Euler (transform.eulerAngles);
if (circOrientation == Orientation.Left) {
toAngle = Quaternion.Euler (gameObject.transform.eulerAngles - byAngles);
circOrientation = Orientation.Right;
}
else if (circOrientation == Orientation.Right) {
toAngle = Quaternion.Euler (gameObject.transform.eulerAngles + byAngles);
circOrientation = Orientation.Left;
}
for(float t = 0f ; t <= 1f ; t += Time.deltaTime/inTime)
{
gameObject.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t) ;
yield return null ;
}
gameObject.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, 1);
}
मैं भी एक बहुत समान coroutine व्यक्ति आर्क्स कहते से, अभिविन्यास Left
(विपरीत दिशाओं में) 30 डिग्री से स्थानांतरित करने के लिए, के रूप में coroutine और छवि में नीचे देखा इस्तेमाल किया
के बाद से SCircle
coroutine एक माउस क्लिक द्वारा सक्रिय होता है, मैं इस मामले में जहां व्यक्ति आर्क्स coroutine चलाया जाता है है और इससे पहले कि यह पूरा हो गया है माता पिता SCircle
coroutine है भी दौड़ो इस मामले में arcs Left
से ए तक बढ़ते हैं, जो मुझे आवश्यक व्यवहार नहीं है। मैं Left
से आगे बढ़ते समय बी पर समाप्त होने का व्यवहार करना चाहता हूं। इसी तरह, बी से, जब SCircle
coroutine चलाया जाता है, जबकि आर्क्स coroutine का कार्य प्रगति पर उन्मुखीकरण Left
वापस आ जाएगी है।
कृपया ध्यान दें कि नीला तीर बाएं आर्क के आंदोलन का प्रतिनिधित्व करता है, लाल सही आर्क का प्रतिनिधित्व करता है और काला SCircle
- मूल वस्तु का आंदोलन दर्शाता है।
बस यह सुनिश्चित करने के लिए, आप एक ही समय में इन दो आर्कों को स्थानांतरित करना चाहते हैं लेकिन अलग-अलग दिशा में और आप भी एक ही समय में आंदोलन को समाप्त करना चाहते हैं? यदि हां, तो कौन सा ऑब्जेक्ट दूसरे का माता पिता है? – Programmer
@ प्रोग्रामर 'स्कीर्कल' मूल वस्तु है, जो एक खाली ऑब्जेक्ट से बनाई गई है जिसमें बाएं और दाएं आर्क दोनों शामिल हैं। मैं नहीं चाहता कि आंदोलन एक ही समय में समाप्त हो क्योंकि बच्चे की चाप के घूर्णन कोरआउटिन माता-पिता 'स्कीर्कल' के घूर्णन कोरआउटिन से पहले शुरू होता है। इसलिए बच्चे arcs रोटेशन माता पिता के सामने खत्म होना चाहिए। बस उस समय एक बिंदु होगा जब दोनों कोरआउट एक साथ चल रहे हैं। आम तौर पर प्रत्येक कोरआउट को इसके समय के लिए होना चाहिए। – Bane
कृपया हमें आर्क्स को 30 डिग्री से घूर्णन करने के लिए कोड दिखाएं। क्या आप किसी भी मौके से स्थानीय रोटेशन की जगह आर्क्स रोटेशन सेट कर रहे हैं? – lockstock