গেম ইঞ্জিন: স্ক্রিপ্টিং সমর্থন বাস্তবায়নের জন্য একটি শালীন উপায়, আর্কিটেকচার ভিত্তিক?


17

আমি একটি সাধারণ গেম ইঞ্জিন বিকাশ করছি (সি # তে, এটি যদি গুরুত্বপূর্ণ) তবে আমি আর্কিটেকচারের দিক থেকে স্ক্রিপ্টিং বাস্তবায়নের কোনও উপযুক্ত উপায় সম্পর্কে ভাবতে পারি না।

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

এবং কথাটি হ'ল, আমি সত্যিই স্ক্রিপ্টগুলিতে গেম যুক্তির সাথে সম্পর্কিত জিনিসগুলি (ইউনিট প্যারামিটারগুলি পরিবর্তন করা ইত্যাদি) এবং গেম-ভিউ সম্পর্কিত স্টাফ উভয়কেই প্রভাবিত করতে চাই, যেমন যুদ্ধের জন্য বিশেষ অ্যানিমেশন / কথোপকথন যা কোনও নির্ভর করতে পারে নির্দিষ্ট স্ক্রিপ্টযুক্ত ট্রিগার।

(সত্য কথা বলতে গেলে, আমি স্ক্রিপ্টটি গেমের প্রবাহকে নিয়ন্ত্রণ করতে চাই, কেবলমাত্র কোর মেকানিক্স / গ্রাফিক্সকে যুক্তি / দর্শনে ছেড়ে দিয়েছি, তবে আমি এটিতে নতুন, তাই আমি এখনই এটি করতে পারি তা নিশ্চিত নই)

আমি তিনটি বিকল্পের কথা ভাবছি:

  • কেবল স্ক্রিপ্টিংটিকে যুক্তিতে বাঁচতে দিন, তবে গেমের গ্রাফিকাল দিক সম্পর্কে এটি জানান। তবে এটি যুক্তি / দর্শন বিভাগকে খুব অস্পষ্ট করে তুলবে, তাই না ...

  • স্ক্রিপ্টিংটিকে একটি পৃথক মডিউল তৈরি করুন যা একই ইভেন্ট ম্যানেজারটি ব্যবহার করে অন্যদের সাথে ইভেন্টগুলি বিনিময় করবে। তবে এর জন্য ইভেন্ট সিঙ্ক্রোনাইজেশন সম্পর্কে খুব সতর্কতা অবলম্বন করা দরকার, আমার ধারণা ... এবং পরিচালককে পুরোপুরি ইভেন্টের ধরণ যোগ করতে হবে। (এখনও, ব্যক্তিগত প্রিয়)

  • স্ক্রিপ্টিংকে সর্বোপরি একটি মডিউল তৈরি করুন, যাতে এটি সরাসরি যুক্তি / দর্শনের কল / ফাংশনগুলিকে প্রভাবিত করতে পারে। এটি পুরো ইভেন্ট এক্সচেঞ্জ স্কিমটিকে স্ক্রু করার ধরণের ব্যয়ে একটি অন্তর্নিহিত বৃহত্তর কার্যকারিতাটির অনুমতি দেয় এবং ভয় পায় যে স্ক্রিপ্টটি সত্যিকার অর্থে না হওয়া সত্ত্বেও জিনিসগুলি ভেঙে ফেলতে পারে।

সুতরাং, আমি এগুলির কোনওটির বিষয়েই সিদ্ধান্ত নিতে পারি না বা স্ক্রিপ্টিং মডিউলটি সন্নিবেশ করার আরও ভাল পদ্ধতির কথা ভাবতে পারি না ... কোনও পরামর্শ বা দরকারী লিঙ্ক?

ধন্যবাদ!

প্রশ্ন স্থানান্তরিত করার জন্য ধন্যবাদ ধন্যবাদ, জানেন না গেমদেবের জন্য একটি বিশেষ বিভাগ রয়েছে


আপনার কোনও সমস্যা কী আছে যে স্ক্রিপ্টিং ভাষার প্রচলনটি সমাধান করবে?
উপুড়হস্ত

উত্তর:


3

আমি বিশ্বাস করি আপনি তৃতীয় বিকল্পটি চান তবে আপনি দেখতে পাচ্ছেন যে আপনার চিন্তাভাবনায় ঠিক আছেন যে সম্ভাব্য দুটি স্থানে যৌক্তিক ঘটনাগুলি ঘটানো খারাপ জিনিস। আপনি দেখতে পাবেন যে আপনি ইঞ্জিনটির লজিক মডিউলটি আপডেট টিক হিসাবে শেষ করতে চান যা দুটি প্রশ্ন জিজ্ঞেস করে 'এখন আমি কী করব?' এবং 'আমি এটি কীভাবে করব?' যার পরে আপনি সেই প্রশ্নের উত্তর দেওয়ার জন্য স্ক্রিপ্টগুলি বেঁধে রাখতে পারেন।

প্রয়োজনীয় যুক্তিযুক্ত উপাদানগুলি অ্যাক্সেস করার জন্য ডেটা এবং একটি API থাকা সামগ্রীর অবজেক্টের সাথে এটি যুগল করুন (আমার অর্থ আপনি এআই পাথ সন্ধানের স্ক্রিপ্ট করতে পারেন, তবে যেহেতু এটি কোডের একটি জেনেরিক অংশ যা সম্ভবত ব্যবহার এবং পুনঃব্যবহারের সম্ভাবনা রয়েছে, কেন নয় এটিকে মডিউলে এম্বেড করুন এবং তারপরে এটিকে স্ক্রিপ্টিং ভাষার সাথে প্রকাশিত এপিআইতে যুক্ত করুন?) এটি আপনাকে অ্যাক্সেসযোগ্যতার পাশাপাশি স্পষ্টভাবে সংজ্ঞায়িত অবস্থানগুলিতে দেওয়া উচিত যেখানে জিনিসগুলি ঘটছে।

আবার, আমি সর্বদা একই বিবৃতি দিয়ে এটিকে অবহিত করি। একটি সমাপ্ত কাজের পণ্য সর্বদা প্রোগ্রামিংয়ে একটি ভাল তত্ত্বের চেয়ে মূল্যবান :)

আশাকরি এটা সাহায্য করবে!


2

এই জাতীয় নমনীয়তা গতির ব্যয়ে আসে বলে ভেবে অনেকে গতিশীল ভাষার শক্তিশালীকে অবমূল্যায়ন করেন; এটি সত্য তবে প্রায়শই ব্যয় সহজ হয় না।

ব্যক্তিগতভাবে আমি গতিশীল ভাষাগুলি ভাবের শোষক ব্যবহার করে যথাসম্ভব বিকাশের ঝোঁক রাখি এবং তারপরে আমি কোথায় এবং যদি অপ্টিমাইজেশন প্রয়োজন হয় তা বুঝতে প্রোটোটাইপটি প্রোফাইল করি ।

আপনার ক্ষেত্রে এর অর্থ হ'ল আপনার তৃতীয় বিকল্পের দিকে এগিয়ে যাওয়ার চেষ্টা করা উচিত, উপযুক্ত গতিশীল ভাষা ব্যবহার করে "উচ্চতর" অংশটি বিকাশ করা উচিত যা আপনি স্ক্রিপ্টিং ভাষা হিসাবেও ব্যবহার করতে পারেন।

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

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

আপনার স্ক্রিপ্ট ইন্টারফেসটি প্রাসঙ্গিক কারখানার পদ্ধতিগুলি সরবরাহ করতে হবে যাতে স্ক্রিপ্টটি সরাসরি ইনস্ট্যান্ট না করে উপাদান তৈরি করতে পারে; এই দৃষ্টান্তগুলি সত্যিকারের বস্তুগুলির উপরে মোড়ানো হতে পারে তাই আরও নিয়ন্ত্রণের অ্যাক্সেস যুক্তি প্রয়োগ করা যেতে পারে।


1

স্ক্রিপ্টিং অবজেক্টের অন্যান্য সামগ্রীর অ্যাক্সেস থাকা দরকার যা এটির জন্য ডেটা সরবরাহ করবে। এই অন্যান্য অবজেক্টগুলি সরাসরি স্ক্রিপ্টিং অবজেক্টে না প্রবেশ করতে সাবধান হন। এটি একটি ভঙ্গুর ইন্টারফেস তৈরি করে। আপনার মধ্যস্থতাকারী শ্রেণীর মতো কিছু থাকতে পারে যা সেই বস্তুর রেফারেন্স পরিচালনা করে এবং স্ক্রিপ্টিং অবজেক্টে ডেটা অ্যাক্সেস সরবরাহ করে।


1

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

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