Timeক্যের কি টাইমলাইনের জন্য বিদ্যমান সমর্থন আছে?


13

আমি ইউনিটি 3 ডি-তে একটি গেমের বিকাশের পরিকল্পনা করছি, এবং ইঞ্জিনটি ইতিমধ্যে কী সরবরাহ করেছে এবং আমাকে কী কোডিং করতে হবে তার সাথে শর্তাবলম্বন করার চেষ্টা করছি।

গেমটি নিজেই একটি ছন্দের গেম হতে চলেছে যার অর্থ অডিও এবং গ্রাফিকাল ইভেন্টগুলি সমন্বয় করা যাতে তারা যখন মনে করা হয় তারা সর্বদা খেলতে পারে। আমি যা এড়াতে চাই তা হ'ল ল্যাগের একটি সম্ভাব্য দৃশ্য যেখানে অডিও বা গ্রাফিকগুলি অন্যগুলির চেয়ে দ্রুত গতিতে শুরু করে।

যখন আমরা বিশ্ববিদ্যালয়ে ফিরে আমার গেম ডিজাইন ক্লাসে এই ধরণের সমন্বয় ব্যবস্থা নিয়ে আলোচনা করেছি তখন আমার প্রফেসর এই ধরণের ডিজাইনের একটি "টাইমলাইন" শ্রেণি বলেছিলেন। ধারণাটি হ'ল আপনি এগুলির এক বা একাধিককে বিভিন্ন হারে অগ্রগতি করতে, ভবিষ্যতে ঘটে যাওয়া বিষয়গুলির শিডিউল করতে এবং পর্যায়ক্রমিক ইভেন্টগুলি সমন্বয় করতে পারেন। যাইহোক, এটিকে একটি "টাইমলাইন" শ্রেণি বলার বিষয়টি আমার প্রফেসর নিজেই সীমাবদ্ধ বলে মনে হয়েছে, কারণ কোনও নির্দিষ্ট এপিআই বৈশিষ্ট্যযুক্ত "টাইমলাইন" কার্যকারিতা একটি ফলহীন প্রচেষ্টা ছিল কিনা তা নিয়ে গুগলিং।

এই জাতীয় কার্যকারিতার জন্য আরও কিছু সাধারণ নাম আছে? ইউনিটির কি এই জাতীয় ইভেন্টগুলির সময়সূচী সমন্বয় করার জন্য পূর্ব-বিদ্যমান পদ্ধতি রয়েছে, বা ইঞ্জিনের মধ্যে এটি কি এমন জিনিস তৈরি করা দরকার? এবং যদি এটি হয়, আমি কিছু টিউটোরিয়াল দিকে নির্দেশ করা প্রশংসা করব!


আমি অনুরূপ টাইমলাইন ক্লাসও ব্যবহার করেছি (তাদের এমনকি একই নাম ছিল)। প্যাটার্নটির আরও সাধারণ নামটি আমার কাছে অজানা, তবে এটি সম্ভবত প্রায়শই কার্যকরী-প্রতিক্রিয়াশীল প্রোগ্রামিং, করোটাইন বা অন্যান্য অ্যাসিনক্রোনাস ধারণার মাধ্যমে প্রয়োগ করা হয়।
ইন্টারফেক্স

উত্তর:


10

যদিও এই কার্যকারিতাটি ইউনিটিতে উপলভ্য নয়, যেমন একটি টাইমলাইনের একটি প্রাথমিক প্রয়োগ খুব বেশি কঠিন হওয়া উচিত নয়।

এখানে আমি কীভাবে যাব তা এখানে:

  • আপনার টাইমলাইন শ্রেণি অভ্যন্তরীণভাবে ইভেন্টগুলি সঞ্চয় করতে ডেটা-কাঠামো হিসাবে একটি অগ্রাধিকার-সারি ব্যবহার করে।
  • একটি ইভেন্ট মাত্র একটি সময় এবং কলব্যাক হতে পারে। : তাই টাইমলাইনে যোগ করার ঘটনা হিসাবে সহজ হিসাবে হবে timeline.AddEvent(0.25f, MyCallback)
  • প্রত্যেকের সাথে Update, টাইমলাইন ক্লাসটি হবে:

    1. floatসময় অতিবাহিত হয়ে প্লেহেড (একটি সাধারণ ) বৃদ্ধি করুন
    2. অগ্রাধিকারের সারির মাথাটি পরীক্ষা করে দেখুন এবং বর্তমান ইভেন্টের প্লেইডের সমান ছোট বা সমতুল্য সমস্ত ইভেন্টের কলব্যাক সরিয়ে কল করুন।

যদি আপনার কোনও ধরণের রিওয়াইন্ড বা পুনরায় খেলনা কার্যকারিতা প্রয়োজন হয় তবে অবশ্যই কাতার থেকে সমস্ত ইভেন্ট সরিয়ে ফেলা বোকামি হবে (অর্থাত্ রিওয়াউন্ড করার সময় আপনাকে এগুলি আবার যুক্ত করতে হবে)। পরিবর্তে আপনি এমন একটি অ্যারে ব্যবহার করতে পারেন যা আপনার ইভেন্টগুলিকে ধারণ করে । একটি ইভেন্ট একটি Timeএবং এর সমন্বয়ে গঠিত হবে Callback। আপনি আপনার অ্যারে অনুসারে বাছাই করতে হবে Time

তারপরে অ্যারে থেকে আইটেমগুলি সরিয়ে না দেওয়ার পরিবর্তে আপনি বর্তমান অ্যারে-সূচকের উপর নজর রাখবেন এবং প্রতিটি আপডেটের সাথে সেই সূচীটি থেকে এগিয়ে যান এবং সেই সাথে সূচকটি Playhead >= Timeবাড়ানোর সাথে সাথে সমস্ত কলব্যাকগুলি সম্পাদন করেন ।

একটি দ্রুত প্লেব্যাক-গতি বাস্তবায়ন উভয় বাস্তবায়নের সাথে কাজ করে এবং এটি এতটা সহজ হবে:

Playhead += Time.deltaTime * playbackSpeed

2
"অতিবাহিত সময়ের মধ্যে প্লেহেড (একটি সহজ ভাসা) বৃদ্ধি করুন" - আপনি যদি এটি করেন তবে আপনি একীভূত ভাসমান-পয়েন্ট ত্রুটি পাবেন। পরিবর্তে আপনার সময়.টাইম (খেলা শুরু হওয়ার সময়) ব্যবহার করা উচিত।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট

4

না, ইউনিটি 3 ডি বাক্সের বাইরে এপিআই নেই।

এটি কর্টিনগুলিকে সমর্থন করে, তবে আমি আপনাকে তাদের সন্ধান করার পরামর্শ দিই। Coroutines সাধারণত সময়সূচী তৈরি এবং ইভেন্টগুলি সিঙ্ক করে তোলে।


1

আমি নিশ্চিত নই যে ২০১২-এর উত্তরগুলির পরে এটি নতুন কিনা, তবে Legক্য আসলে (লিগ্যাসি) অ্যানিমেশন সম্পাদকের মাধ্যমে টাইমলাইন নিয়ন্ত্রণের পক্ষে সমর্থন করে ।

যদিও এই বৈশিষ্ট্যটি প্রধানত বক্ররেখার সাথে অবজেক্টের পরামিতিগুলি অ্যানিমেট করার উদ্দেশ্যে করা হয়েছে, এটিতে অ্যানিমেশন ইভেন্টগুলিতে স্ক্রিপ্টগুলি ট্রিগার করার ক্ষমতা অন্তর্ভুক্ত রয়েছে । এই স্ক্রিপ্টগুলি আপনার গ্রাফিক্স এবং অডিও ড্রাইভ করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.