আমি বর্তমানে একটি উপাদান-ভিত্তিক সত্তা সিস্টেমটি বাস্তবায়নের চেষ্টা করছি, যেখানে কোনও সত্তা মূলত কেবল একটি আইডি এবং কিছু সহায়ক পদ্ধতি একসাথে গেম অবজেক্ট গঠনের জন্য একগুচ্ছ উপাদানগুলি বেঁধে রাখে। এর কয়েকটি লক্ষ্য অন্তর্ভুক্ত:
- উপাদানগুলির মধ্যে কেবলমাত্র রাষ্ট্র থাকে (যেমন অবস্থান, স্বাস্থ্য, গোলাগুলি গণনা) => যুক্তিগুলি "সিস্টেমে" যায় যা এই উপাদানগুলি এবং তাদের রাজ্যগুলিকে প্রক্রিয়াজাত করে (যেমন ফিজিক্স সিস্টেম, রেন্ডার সিস্টেম ইত্যাদি))
- আমি খাঁটি সি # এবং স্ক্রিপ্টিং (লুয়া) এর মাধ্যমে উভয়ই উপাদান এবং সিস্টেমগুলি প্রয়োগ করতে চাই। মূলত আমি আমার সি # উত্সটি পুনরায় সংকলন না করে সরাসরি লুয়ায় সম্পূর্ণ নতুন উপাদান এবং সিস্টেমগুলি সংজ্ঞায়িত করতে সক্ষম হতে চাই।
এখন আমি কীভাবে এটি কার্যকরভাবে আনডের সাথে নিয়মিত পরিচালনা করতে হবে সে সম্পর্কে ধারণাগুলি খুঁজছি, সুতরাং সি # উপাদানগুলি বা লুয়া উপাদানগুলি অ্যাক্সেস করার জন্য আমার আলাদা সিনট্যাক্স ব্যবহার করার দরকার নেই।
আমার বর্তমান পদ্ধতির নিয়মিত, সর্বজনীন বৈশিষ্ট্য ব্যবহার করে সি # উপাদানগুলি প্রয়োগ করা হবে, সম্ভবত সম্পাদককে ডিফল্ট মান এবং স্টাফ সম্পর্কে বলার কিছু বৈশিষ্ট্য দ্বারা সজ্জিত। তারপরে আমার কাছে একটি সি # ক্লাস "স্ক্রিপ্টকম্পোন্ট" থাকবে, যা কেবলমাত্র একটি লুয়া টেবিলটি অভ্যন্তরীণভাবে আবৃত করে এই টেবিলটি একটি স্ক্রিপ্ট দ্বারা তৈরি করা হয়েছিল এবং সেই নির্দিষ্ট উপাদান ধরণের সমস্ত রাজ্য ধরে রেখেছিল। আমি আসলে সি # সাইড থেকে খুব বেশি রাজ্যটি অ্যাক্সেস করতে চাই না, কারণ সংকলনের সময় আমি জানতাম না, স্ক্রিপ্ট কম্পোনেন্টগুলি কী কী বৈশিষ্ট্যগুলি আমার কাছে উপলভ্য হবে। তবুও, সম্পাদককে এটি অ্যাক্সেস করতে হবে, তবে নীচের মত একটি সাধারণ ইন্টারফেস যথেষ্ট হবে:
public ScriptComponent : IComponent
{
public T GetProperty<T>(string propertyName) {..}
public void SetProperty<T>(string propertyName, T value) {..}
}
এটি কেবল লুয়া টেবিলটি অ্যাক্সেস করতে পারে এবং লুয়া থেকে সেই বৈশিষ্ট্যগুলি সেট এবং পুনরুদ্ধার করতে পারে এবং এটিকে সহজে খাঁটি সি # উপাদানগুলিতেও অন্তর্ভুক্ত করা যেতে পারে (তবে প্রতিচ্ছবি বা কোনও কিছুর মাধ্যমে নিয়মিত সি # বৈশিষ্ট্যগুলি ব্যবহার করুন)। এটি কেবল নিয়মিত গেম কোড দ্বারা নয়, সম্পাদকে ব্যবহৃত হত, সুতরাং এখানে পারফরম্যান্স ততটা গুরুত্বপূর্ণ নয়। কোনও নির্দিষ্ট উপাদান প্রকৃতপক্ষে কী কী বৈশিষ্ট্য সরবরাহ করে তা নথিভুক্ত করে এমন কিছু উপাদান বিবরণ উত্পন্ন বা হস্তলিখনের জন্য প্রয়োজনীয় করে তোলে তবে এটি কোনও বিশাল সমস্যা হবে না এবং এটি পর্যাপ্ত স্বয়ংক্রিয়ভাবে হতে পারে।
তবে লুয়া দিক থেকে উপাদানগুলি অ্যাক্সেস করবেন কীভাবে? যদি আমি এমন কিছুতে কল করি তবে আমি getComponentsFromEntity(ENTITY_ID)
সম্ভবত ইউজারডেটা হিসাবে "স্ক্রিপ্টকম্পোনেন্ট" সহ নেটিভ সি # উপাদানগুলির একটি গুচ্ছ পাব। মোড়ানো লুয়া টেবিল থেকে মানগুলি অ্যাক্সেস করার ফলে GetProperty<T>(..)
অন্যান্য সি # উপাদানগুলির মতো, সরাসরি বৈশিষ্ট্যগুলিতে অ্যাক্সেস না করে পদ্ধতিটি কল করার ফলে ।
সম্ভবত getComponentsFromEntity()
লুয়া থেকে ডাকা একটি বিশেষ পদ্ধতি লিখুন , যা "স্ক্রিপ্টকম্পোন্ট" বাদে সমস্ত নেটিভ সি # উপাদানকে ইউজারডাটা হিসাবে ফিরিয়ে দেয়, যেখানে এটি মোড়ানো টেবিলটি ফিরে আসবে। তবে উপাদানগুলির সাথে সম্পর্কিত অন্যান্য পদ্ধতি থাকবে এবং সি # কোড থেকে বা লুয়া স্ক্রিপ্ট থেকে ডেকে আনার জন্য আমি এই সমস্ত পদ্ধতিগুলির সত্যই নকল করতে চাই না।
চূড়ান্ত লক্ষ্য হ'ল দেশীয় উপাদান এবং লুয়া উপাদানগুলির মধ্যে বিশেষ কোনও সিনট্যাক্সের পার্থক্য না করে বিশেষত লুয়া দিক থেকে সমস্ত ধরণের উপাদান হ্যান্ডেল করা। যেমন আমি এর মতো একটি লুয়া স্ক্রিপ্ট লিখতে সক্ষম হতে চাই:
entity = getEntity(1);
nativeComponent = getComponent(entity, "SomeNativeComponent")
scriptComponent = getComponent(entity, "SomeScriptComponent")
nativeComponent.NativeProperty = 5
scriptComponent.ScriptedProperty = 3
স্ক্রিপ্টটি আসলে কী ধরণের উপাদান পেল সে সম্পর্কে চিন্তা করা উচিত নয় এবং আমি উপাদানগুলি পুনরুদ্ধার, যোগ করতে বা অপসারণ করতে সি # দিক থেকে যে একই পদ্ধতি ব্যবহার করেছি তা ব্যবহার করতে চাই।
হতে পারে যে সত্তা সিস্টেমের সাথে স্ক্রিপ্টিং একীকরণের কিছু নমুনা বাস্তবায়ন আছে?