दिवस 14: युनिटी वापरुन अ‍ॅपमध्ये स्क्रीनशॉट कसे घ्यावेत. एआर साठी ट्यूटोरियल

या लेखात, आम्ही कोणत्याही एआर अनुप्रयोगासाठी स्क्रीनशॉट क्षमता तयार करण्याकडे पाहू. खरं तर, हे नॉन-एआर प्रकल्प आणि अ‍ॅप्सवर देखील कार्य करेल.

आमच्या सर्वांना वैशिष्ट्य विनंती आहे किंवा आमच्या अ‍ॅपमध्ये स्क्रीनशॉट घ्या आणि स्क्रीनशॉट स्नॅप करण्यासाठी ओएस शॉर्टकट वापरणार्‍या वापरकर्त्यांऐवजी ते थेट सामायिक करू इच्छित आहोत. हा अनुभव इतरांसह थेट सामायिक करण्यासाठी एआर अॅप्समध्ये विशेषकरुन महत्त्वपूर्ण ठरतो.

म्हणूनच, आज आम्ही एक स्क्रिप्ट लिहू जे युनिटीमधील कोणत्याही गेमोब्जेक्टला संलग्न केले जाऊ शकते जे बटणाच्या क्रियेद्वारे स्क्रीनशॉट घेऊ शकते किंवा आपण आपल्या स्वत: च्या वर्गातील पद्धतींना कॉल करू शकता.

प्रारंभ करणे

ही क्रॉस-प्लॅटफॉर्म सुसंगत स्क्रिप्ट असेल आणि Android, iOS आणि अगदी डेस्कटॉप प्रकल्पांवर देखील कार्य करेल.

पूर्व शर्ती

  1. ऐक्य 2019.2.18f1.
  2. सी # प्रोग्रामिंग आणि समजून.

अंमलबजावणी

आम्ही ज्या दृष्टिकोनातून जात आहोत ते अनियंत्रित रिझोल्यूशनसह उच्च-रिझोल्यूशन स्क्रीनशॉट घेईल. आम्ही युनिटी मेनकेमेरा वापरू जी टेक्स्ट 2 डी तयार करण्यासाठी सर्वकाही प्रदान करते. त्यानंतर टेक्चर 2 डी एक .png मध्ये रूपांतरित होईल आणि स्थानिक डिस्क स्टोअरमध्ये संग्रहित होईल.

आम्ही जेपीईजी, जेपीजी, रॉ, आणि पीपीएम सारख्या एकाधिक फाईल स्वरूपनास समर्थन देऊ. हे संपादकातूनच कॉन्फिगर केले जाऊ शकतात. आपण मालिकेत स्क्रीनशॉट घेऊन आणि एकत्र करून व्हिडिओ तयार करण्यासाठी पीपीएम स्वरूप देखील वापरू शकता.

स्क्रीन कॅप्चर वर्ग

प्रथम घोषित सार्वजनिक व्हेरिएबल्स

// आपले स्क्रीनशॉट रिझोल्यूशन सेट करा पब्लिक इन्ट कॅप्चरविड्थ = 1920; पब्लिक इंट कॅप्चरहाइट = 1080; // कच्चे, जेपीजी, पीएनजी किंवा पीपीएम (साधे कच्चे स्वरूप) सह सार्वजनिक कॉन्फिगरेशन फॉर्म en रॉ, जेपीजी, पीएनजी, पीपीएम}; सार्वजनिक स्वरूप स्वरूप = स्वरूप.जेपीजी; आउटपुट लिहिण्यासाठी // फोल्डर (डेटा पथवर डीफॉल्ट) खाजगी स्ट्रिंग आउटपुट फोल्डर; स्क्रीनशॉट खाजगी रेक्ट रेक्टसाठी // खाजगी चल आवश्यक. खाजगी रेंडरटेक्चर रेंडरटेक्चर; खाजगी टेक्चर 2 डी स्क्रीनशॉट;

आपण स्क्रीनशॉट कॅप्चरहाइट आणि रुंदीच्या चलांसह असण्यासारखे कोणतेही रिझोल्यूशन सेट करू शकता.

डिस्कवर लिहिताना आम्ही त्या रुपात जतन करण्यासाठी संपादकाकडून सेट स्वरूप वापरू.

आउटपुट फोल्डर अ‍ॅपच्या स्थापित स्थानाच्या पर्सिस्टंट डेटापॅट निर्देशिका अंतर्गत तयार केले जाईल. हे हार्डवेअर दरम्यान भिन्न असेल.

पुढे जर आपली आउटपुट डिरेक्टरी अस्तित्वात नसेल तर नवीन फोल्डर तयार करुन त्यास प्रारंभ करू. आम्ही स्टार्ट () मेथडमध्ये करतो. हे डीबग कन्सोलवर आउटपुट स्थान देखील मुद्रित करेल जेणेकरून स्क्रीनशॉट्स कोठे सेव्ह केले जातील हे आपण पाहू शकता. प्रत्येक प्लॅटफॉर्मसाठी स्थान फोल्डर शोधण्यासाठी आपण येथे एपीआय देखील पाहू शकता.

// निर्देशिका खाजगी शून्य प्रारंभ करा () {आउटपुटफोल्डर = persप्लिकेशन.पर्सिटीडाटापथ + "/ स्क्रीनशॉट्स" "; if (! Directory.Exists (आऊटपुट फोल्डर)) {डिरेक्टरी.क्रिएटडिरेक्टरी (आउटपुट फोल्डर); डीबग.लॉग ("सेव्ह पथ असेल:" + आउटपुट फोल्डर); }}

पुढे, नवीन अद्वितीय फाइलनाव तयार करण्यासाठी मदतनीस पद्धत.

खाजगी स्ट्रिंग क्रिएटफाईलनेम (इंट रुंदी, इन्ट उंची) {// स्क्रीनशॉट फाइलनामात जोडण्यासाठी टाइमस्टॅम्प टाइमस्टँप = दिनांकटाइम.नाऊ.टॉस्ट्रिंग ("yyyyMMddTHHmmss"); // अनोखी फाइल var फाइलनाव = स्ट्रिंगसाठी रुंदी, उंची आणि टाइमस्टॅम्प वापरा. ​​फॉरमॅट ("{0} / स्क्रीन_ {1} x {2} _ {3}. {4}", आउटपुट फोल्डर, रुंदी, उंची, टाइमस्टॅम्प, format.ToString (). ToLower ()); // रिटर्न फाइलनाव रिटर्न फाइलनाव; }

शेवटी, प्राथमिक पद्धत. आपल्या प्रकल्पात मेनकेमेरा टॅगसह कॅमेरा सेटअप असल्याचे सुनिश्चित करा. किंवा अन्यथा, आपण कॅमेरा ऑब्जेक्टमध्ये स्वतंत्रपणे देखील पास करू शकता.

खाजगी शून्य कॅप्चरस्क्रिनशॉट () {isProcessing = true; // जर स्क्रीनशॉट ऑब्जेक्ट्स तयार करा (रेंडरटेक्चर == नल) {// ऑफ-स्क्रीन रेंडर टेक्स्ट रेक्टर्ड = नवीन रेक्ट (०, ०, कॅप्चरविड्थ, कॅप्चरहाइट) मध्ये प्रस्तुत केले जाईल; रेंडरटेक्चर = नवीन रेंडरटेक्चर (कॅप्चरविड्थ, कॅप्चरहाइट, 24); स्क्रीनशॉट = नवीन टेक्चर 2 डी (कॅप्चरविड्थ, कॅप्चरहाइट, टेक्स्चर फोरमॅट. आरजीबी 24, खोटे); main // मुख्य कॅमेरा मिळवा आणि त्याचे आउटपुट कॅमेरा कॅमेरा = कॅमेरा.माईन वरील तयार केलेल्या स्क्रीन-रेंडर टेक्सचरमध्ये त्याचे आउटपुट प्रस्तुत करा. कॅमेरा.टार्टजेट = रेंडरटेचर; कॅमेरा.रेंडर (); // प्रस्तुत रचनेस सक्रिय म्हणून चिन्हांकित करा आणि टेक्स्चर 2 डी रेंडरटेक्चर.एक्टिव्ह = रेंडरटेक्चरमध्ये वर्तमान पिक्सेल डेटा वाचा. स्क्रीनशॉट.रेडपिक्सल (आयटम, 0, 0); // टेक्स्चर रीसेट करा आणि स्क्रीन डेटा वाचन केल्यापासून कॅमेरामधून रेंडर टेक्स्ट काढा कॅमेरा.टारजेट टेक्स्चर = निरर्थक; रेंडरटेक्चर.एक्टिव्ह = शून्य; // get our filename स्ट्रिंग फाईलनाव = क्रिएटफाईलनेम ((इंट)) रेक्ट.विड्थ, (इंट) रेक्ट.हाइट); // निर्दिष्ट प्रतिमा स्वरूप बाईटसाठी फाइल शीर्षलेख / डेटा बाइट मिळवा [] fileHeader = null; बाइट [] fileData = शून्य; // फॉरमॅट सेट करा आणि त्यावर आधारित एन्कोड करा (फॉरमॅट == फॉर्मेट.एआरडब्ल्यू) {फाईलडेटा = स्क्रीनशॉट.गेटरावा टेक्स्टडाटा (); } अन्यथा जर (स्वरूप == स्वरूप.पीएनजी) {फाईलडेटा = स्क्रीनशॉट.इन्कोडटॉपीएनजी (); } अन्यथा जर (स्वरूप == स्वरूप.जेपीजी) {फाईलडेटा = स्क्रीनशॉट.इन्कोडटोजेपीजी (); } अन्य // पीपीएम फायलींसाठी {// एक फाइल शीर्षलेख तयार करा - पीपीएम फायली स्ट्रिंग हेडरएसटीआर = स्ट्रिंग. फॉर्मेट ("पी 6 \ एन {0} {1} 25 n255 \ n", रेक्ट.विड्थ, रेक्ट.हाइट); fileHeader = System.Text.Encoding.ASCII.GetBytes (HeaderStr); फाईलडाटा = स्क्रीनशॉट.गेटराव टेकचरडाटा (); thread // मुख्य थ्रेड नवीन सिस्टीम वरून बचत ऑफलोड करण्यासाठी नवीन धागा तयार करा. थ्रेडिंग. थ्रेड (() => {वार फाइल = सिस्टम.आयओ.फाइल.क्रीएट (फाइलनाव); जर (फाईलहेडर! = निरर्थक) {फाइल. (FileHeader, 0, fileHeader.Length) लिहा; फाइल.राइट (fileData, 0, fileData.Length); file.Close (); डीबग.लॉग (स्ट्रिंग.फोरमॅट ("स्क्रीनशॉट सेव्ह केलेला {0}, आकार {1} ", फाईलनाव, फाईलडाटा.लेंथ)); isProcessing = चुकीचे;;). प्रारंभ करा (); // क्लीनअप नष्ट (रेंडरटेक्चर); रेंडरटेक्चर = शून्य; स्क्रीनशॉट = शून्य; }

आम्ही नंतर नवीन टेकस्क्रीनशॉट () पद्धतीसह ही पद्धत उघड करतो.

सार्वजनिक शून्य टेकस्क्रीनशॉट () {if (! isProcessing) {कॅप्चरस्क्रीनशॉट (); } अन्य {डीबग.लॉग ("सध्या प्रक्रिया करीत आहे"); }}

आम्ही सध्या स्क्रीनशॉटवर प्रक्रिया करत असल्यास आम्ही दुसरा एक घेत नाही. ही पद्धत थेट बटणाद्वारे किंवा दुसर्‍या स्क्रिप्टद्वारे कॉल केली जाऊ शकते.

बस एवढेच!

ही स्क्रिप्ट सेव्ह करा आणि त्यास दृश्यातील कोणत्याही गेमोब्जेक्टशी जोडा आणि कॉन्फिगर करा.

कृपया आपल्याकडे असलेल्या कोणत्याही शंका किंवा विचारांसह खाली टिप्पणी द्या आणि मी ASAP ला प्रतिसाद देईन.

मूळतः 1 मार्च 2020 रोजी https://tutorialsforar.com वर प्रकाशित केले.