2012-07-06 5 views
8

मैं सी # के लिए बहुत नया हूं। मैं सी # और एकता को बेहतर सीखने में मदद करने के लिए एकता में कुछ बना रहा हूं।सी # और यूनिटी 3 डी जबकि कुंजी दबाया जा रहा है

Input.GetKeyDown(KeyCode.UpArrow)) 

केवल एक बार आग जब भीतर रखा:

मुझे पता है क्यों चाहते

void Update() 

के बाद से अद्यतन एक पाश, यह क्यों निकाल दिया नहीं है, जबकि मैं कुंजी को दबाए रखें है (में मेरा मामला एक क्षेत्र को स्थानांतरित करने का कारण बनता है)?

मैंने इसे दो बूल का उपयोग करके काम करने में कामयाब रहा है, जब कुंजी दबाया जाता है और रिलीज़ किया जाता है।

यहाँ मेरी पूरी स्क्रिप्ट है कि मैं एक क्षेत्र के लिए कदम और अनुकरण त्वरण/मंदी के साथ खेल रहा हूँ है:

using UnityEngine; 
using System.Collections; 

public class sphereDriver : MonoBehaviour { 
int x ; 
bool upPressed = false ; 
bool downPressed = false ; 
void Start() 
{ 
    x = 0 ; 
} 

void Update() 
{ 
    if(x > 0) { 
     x -= 1 ; 
    } 
    if(x < 0) { 
     x += 1 ; 
    } 
    if(Input.GetKeyDown(KeyCode.UpArrow)) 
    { 
     upPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.UpArrow)) 
    { 
     upPressed = false ; 
    } 

    if(upPressed == true) 
    { 
     x += 5 ; 
    } 

    if(Input.GetKeyDown(KeyCode.DownArrow)) 
    { 
     downPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.DownArrow)) 
    { 
     downPressed = false ; 
    } 

    if(downPressed == true) 
    { 
     x -= 5 ; 
    } 

    transform.Translate(x * Time.deltaTime/10, 0, 0) ; 
} 

} 

उत्तर

6

documentation का कहना है कि यह सामान्य, अपेक्षित व्यवहार है।

आप शायद GetButton या GetAxis का उपयोग करना चाहते हैं, क्योंकि जब तक कुंजी दबाई जाती है तब तक "दबाया" इंगित करता है (GetButton सत्य लौटाता है, GetAxis रिटर्न 1)।

+0

धन्यवाद! चूंकि वे दो कार्य एकता विशिष्ट हैं, वैसे ही मैंने मूल रूप से ऐसा किया होगा जो मैं केवल सी # में प्राप्त करने के लिए सबसे अधिक करूँगा? – imperium2335

+0

हां, यह करने का यह एक आम तरीका होगा। – redtuna

5

Input.GetKeyDown पर प्रलेखन से।

आपको इस फ़ंक्शन को अद्यतन फ़ंक्शन से कॉल करने की आवश्यकता है, क्योंकि राज्य प्रत्येक फ्रेम को रीसेट कर देता है। यह तब तक सही नहीं होगा जब तक कि उपयोगकर्ता ने कुंजी जारी नहीं की है और इसे फिर से दबाया है।

यह विधि मेन्यू या अन्य एक बार ईवेंट खोलने के लिए सबसे उपयोगी है। जैसे निरंतर संवाद।

आप ऊपर वर्णित विधियों का उपयोग कर सकते हैं, हालांकि आप अपने लक्ष्य को प्राप्त करने के लिए Input.GetKey का उपयोग कर सकते हैं।

उपयोगकर्ता द्वारा नाम की कुंजी को दबाए रखने पर सत्य लौटाता है।

संबंधित मुद्दे