দীর্ঘ উত্তর পছন্দ না তাদের জন্য সংক্ষিপ্তসার ...
এটি করা যেতে পারে তবে কোনও বিলম্ব থাকলে নিখুঁত মাল্টিপ্লেয়ার পদার্থবিজ্ঞান করা অসম্ভব । পদার্থবিজ্ঞানের ক্ষতিকারক প্রভাবগুলিকে কেন ব্যাখ্যা করা হয় এবং তারপরে আপনার পদার্থবিজ্ঞানের সিমুলেশনে লেটেন্সির প্রভাব হ্রাস করার টিপস সরবরাহ করা হয়।
মাল্টিপ্লেয়ার ফিজিক্স গেম তৈরি করা বিপদে পরিপূর্ণ হতে পারে। একটি "নিখুঁত" অনলাইন মাল্টিপ্লেয়ার পদার্থবিজ্ঞানের অভিজ্ঞতা তৈরি করা অসম্ভব। এটিকে আরও উন্নত করার জন্য আপনি করতে পারেন এমন কিছু জিনিস রয়েছে তবে কোনও বিলম্বিতা ধরে নিখুঁত পদার্থবিজ্ঞানের কোনও উপায় নেই।
সমস্যাটি হ'ল, পদার্থবিদ্যাকে বাস্তববাদী হওয়ার জন্য দ্রুত এবং প্রতিক্রিয়াশীল হতে হবে, তবে একই সাথে সমস্ত কারণগুলির সংযুক্ত ক্রিয়াগুলির ভিত্তিতে গণনা করতে হবে - যার অর্থ সমস্ত খেলোয়াড়ের সম্মিলিত ক্রিয়া। এবং যদি বিলম্ব হয় তবে এটি রিয়েল টাইমে করা যাবে না।
আপনি বিভিন্ন কারণকে নিয়ন্ত্রণে রাখতে পারবেন কিনা তা নির্ধারণ করা আপনার বিকাশকারী হিসাবে বিবেচনা করবে এবং বুঝতে হবে যে লেটেন্সি খুব বেশি হয়ে গেলে প্লেয়ারের অভিজ্ঞতা হ্রাস পাবে। আপনি যদি এটির সাথে থাকতে পারেন (এবং আপনার প্লেয়াররা পারেন) তবে এটির জন্য যান। কীভাবে আপনি জিনিসগুলিকে মসৃণভাবে চালিয়ে রাখতে পারেন সে সম্পর্কে কিছু নোটের জন্য এই পোস্টের শেষের দিকে দেখুন।
কীভাবে জিনিসগুলি গোলযোগ হতে পারে তা দেখানোর একটি উদাহরণ
এমন একটি গেমটি কল্পনা করুন যেখানে দুটি প্লেয়ার (ক্লায়েন্ট) কোনও সার্ভারের সাথে সংযুক্ত থাকে। ক্লায়েন্ট থেকে সার্ভারে ইন্টারনেট জুড়ে যেতে একটি বার্তা নিতে 100 মিলিসেকেন্ড (1/10 তম) লাগে। যখন কোনও খেলোয়াড় কিছু করেন, সার্ভারে একটি বার্তা প্রেরণ করা হয় যা তারা কী করেছিল saying সার্ভারটি তখন অন্য খেলোয়াড়দের কাছে বার্তাটি সম্প্রচার করে যাতে তারা সবাই জানেন যে অভিনয় প্লেয়ারটি কী করেছে।
এখন এমন একটি পরিস্থিতি তৈরি করুন যেখানে দুটি খেলোয়াড়ের মাটিতে ক্রেট থাকে যা একটি পদার্থবিজ্ঞানের বস্তু। প্লেয়ার এ এটিকে একদিকে আঘাত করে, এটিকে কিছু দিকের দিকে চালিত করে। তবে একই সময়ে, প্লেয়ার বি একে অন্য দিকে প্রেরণ করে এটি অন্য দিকে প্রেরণ করে।
আসুন এটি পরিচালনা করার বিভিন্ন উপায় এবং ফলাফলগুলি কী হবে তা দেখুন ...
পদার্থবিজ্ঞান যদি কেবল সার্ভারে গণনা করা হয় তবে কী হবে?
মনে করুন আমাদের কেবলমাত্র সার্ভারে পদার্থবিজ্ঞান গণনা করা আছে। প্লেয়ার এ "আমি এইভাবে ক্রেটটি হিট করেছি" বার্তাটি সার্ভারে প্রেরণ করি, 1/10 তম পরে দ্বিতীয় সার্ভারটি বার্তা পায়। প্লেয়ার বি তাদের "আমি এইভাবে ক্রেট হিট করেছি" বার্তা প্রেরণ করে। সার্ভার দুটি ক্রিয়াকলাপের সংমিশ্রণ থেকে পদার্থবিজ্ঞানের পরিবর্তন গণনা করে এবং উভয় খেলোয়াড়কে বার্তা প্রেরণ করে বলে, "ঠিক আছে এটি এরকম চলে।" মিলিত উভয় খেলোয়াড়ের ক্রিয়নের ভিত্তিতে পারফেক্ট ফিজিক্স সঞ্চালিত হয়।
তবে সমস্যাটি হ'ল যে কোনও খেলোয়াড় ক্রেট প্রতিক্রিয়া দেখার আগে এটি সেকেন্ডের 2/10 তম হবে। উভয় খেলোয়াড়ের বার্তাগুলি সার্ভারে পৌঁছাতে সেকেন্ডের 1/10 তম সময় নেয়, তারপরে উভয় খেলোয়াড়ের জন্য সার্ভার গণনার ফলাফলের জন্য সেকেন্ডের আরও 1/10 তম।
নীচের লাইন, ল্যাগি গেমপ্লে।
পদার্থবিজ্ঞান যদি কেবল ক্লায়েন্টের উপর গণনা করা হয় তবে কী হবে?
মনে করুন আমাদের কাছে পদার্থবিজ্ঞান কেবল ক্লায়েন্টের উপর গণনা করা আছে। প্লেয়ার এ এর দৃষ্টিকোণ থেকে এটি তাকান। প্লেয়ার এ ক্রেটকে আঘাত করে এবং এটি অবিলম্বে তাদের দিকে যেতে শুরু করে। প্লেয়ার এ কী করেছে সে সম্পর্কে সার্ভারে একটি বার্তা প্রেরণ করা হয়।
যদিও একই সময়ে, বি তাদের হিট করেছে এবং ক্রেটকে তাদের দিকে যেতে দেখেছে এবং তারা কী করেছে সে সম্পর্কে সার্ভারকে একটি বার্তা প্রেরণ করেছে।
সেকেন্ডের 2/10 তম পরে, ক্লায়েন্টগুলির কাছে সার্ভার থেকে একটি বার্তা আসে। A কে বলা হয় বি কী করেছে, এবং বি কে বলা হয়েছে যে এ কী করেছে। সমস্যাটি হ'ল উভয় ক্লায়েন্টই বলছেন, "ভাল প্লেয়ার এক্স এই জায়গাটিতে এটি হিট করতে পারে তবে সেই জায়গায় আর কোনও ক্রেট নেই, তাই তাদের হিট কিছুই করেনি।"
নীচের লাইনটি হল, দুটি গেম সিঙ্কের বাইরে এবং প্লেয়ারের একটি ভাগ করার অভিজ্ঞতা নেই। দুজনেই আলাদা জিনিস দেখলে মাল্টিপ্লেয়ারের লাভ কী?
পদার্থবিজ্ঞান যদি ক্লায়েন্ট এবং সার্ভার উভয়ই গণনা করা হয়?
এই ক্ষেত্রে, পদার্থবিজ্ঞান ক্লায়েন্টের জন্য গণনা করা হয় যাতে খেলোয়াড়রা তাত্ক্ষণিকভাবে নো-লেগ প্রতিক্রিয়া দেখতে পায় তবে এটি সার্ভারেও গণনা করা হয় তাই এটি সমস্ত খেলোয়াড়ের জন্য "সঠিক"।
উভয় খেলোয়াড় ক্রেটকে তাদের নিজ নিজ দিকনির্দেশিত করে এবং প্রত্যেকে কেবল তাদের হিটের উপর ভিত্তি করে ক্রেট চালনা দেখে। তবে তারপরে সেকেন্ডের 2/10 তম পরে, সার্ভারটি ফিরে এসে বলে, "আসলে, আপনি উভয়ই ভুল। ক্রেটটি এভাবে চলে গেছে।" হঠাৎ উভয় খেলোয়াড় ক্রেটকে মারাত্মকভাবে দিকনির্দেশগুলি পরিবর্তন করে একটি নতুন জায়গায় গ্ল্যাচ দেখতে পান।
নীচের লাইনটি, একটি চটকদার খেলা।
উপসংহার
মূলত যখন কোনও ধরণের বিলম্ব থাকে তখন একাধিক খেলোয়াড়ের সাথে নিখুঁত পদার্থবিজ্ঞানের খেলা করার কোনও উপায় নেই। আপনি একটি দুর্দান্ত গেম তৈরি করতে পারেন, তবে কিছু খেলোয়াড়ের জন্য খারাপ অভিজ্ঞতা তৈরি করার জন্য আপনার অত্যধিক বিলম্বিত হওয়ার ঝুঁকি থাকবে। তবে আপনার গেমের অভিজ্ঞতা ভাল রাখার জন্য আপনি করতে পারেন এমন কিছু জিনিস রয়েছে।
মাল্টিপ্লেয়ার গেমটি ভালভাবে চালাতে আপনি যা করতে পারেন
সাধারণ সংঘর্ষের পরিমাণগুলি ব্যবহার করুন। যখন একটি সাধারণ কিউব শেপটি করবে তখন পদার্থবিজ্ঞানের সাথে আকারের প্রতিটি বিবরণকে মডেলিং করতে বিরক্ত করবেন না। পদার্থবিজ্ঞানের জন্য একটি স্পাইকি বলকে স্পাইকি বল হিসাবে মডেল করা উচিত নয়। পরিবর্তে এটি একটি গোলক হিসাবে মডেল করুন।
ছোট অসম্পূর্ণ বস্তুগুলিকে ক্লায়েন্ট-কেবল আইটেমগুলি তৈরি করুন। একটি উদাহরণ কোনও ভাঙা উইন্ডো থেকে ভাঙা কাচের বিট হতে পারে। আপনি প্রতিটি ক্লায়েন্টকে তাদের নিজস্ব অনুকরণ করতে দিতে পারেন, এবং তারা পৃথক হলেও এগুলি সত্যিই আসে না।
সক্রিয় পদার্থবিজ্ঞানের বস্তুর সংখ্যা কম রাখার জন্য কেবল পদার্থ পদার্থবিদ্যার অবজেক্ট তৈরি করতে হবে।
মাল্টিপ্লেয়ার পদার্থবিজ্ঞান করার সময় আপনার গেমটি ধীর গতিতে চালান। "বুলেট সময়" ভাবুন। ধীর গতির গেমগুলি বিলম্বের জন্য ক্ষতিপূরণ দেয় এবং একাধিক খেলোয়াড়কে পদার্থবিদ্যার সাথে একসাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয়।
খেলোয়াড়দের একসাথে কোনও ধরণের পরিস্থিতি স্থাপনের মঞ্জুরি দিন এবং তারপরে কিছু সংকেত অনুসারে পদার্থবিজ্ঞান উভয় খেলোয়াড়ের জন্যই সিমুলেটেড হয় এবং উভয়ই তাদের সম্মিলিত ক্রিয়ের ফলাফল দেখেন। খেলাগুলি ক্রমটি শেষ না হওয়া পর্যন্ত এটিতে হস্তক্ষেপ করতে পারে না।
ফিজিক্স পৃথক করুন যাতে তারা একে অপরের সাথে হস্তক্ষেপ করতে না পারে। এটি বোলিং বা পুলের মতো খেলায় দুর্দান্ত হবে, যেখানে একক সময়ে কেবল একজন খেলোয়াড়ের নিয়ন্ত্রণ থাকে বা প্রতিটি খেলোয়াড়ের নিজস্ব "স্যান্ডবক্স" থাকে (বোলিং লেনের মতো)।
আপনি যদি তাদের 'পরাজিত করতে না পারেন তবে তাদের সাথে যোগ দিন' এবং পদার্থবিজ্ঞানকে আপনার গেমের অংশ হতে পারে। ভাঙ্গা পদার্থবিজ্ঞানের আইন বা অন্য কিছু নিয়ে চটকদার মহাবিশ্বে থাকার গল্পটি কল্পনা করুন :)
পরিশিষ্ট: শুটিং গেমগুলি এর সাথে কীভাবে কাজ করে
শ্যুটিং গেমগুলি অত্যধিক জটিল পদার্থবিজ্ঞান না করে এটি মোকাবেলা করে। তারা ক্লায়েন্টের পার্শ্ব প্রতিক্রিয়াগুলি ব্যবহার করে যাতে প্লেয়ারগুলি জিনিসগুলি দ্রুত দেখতে পায় তবে সার্ভারটি যা ঘটেছে তার চূড়ান্ত কল করে।
এমন দৃশ্যের কল্পনা করুন যেখানে প্লেয়ার একটি অঙ্কুর প্লেয়ার বি। আপনার সাধারণ শ্যুটার গেমটি এরকম কিছু করবে ...
- এ তারা বি-তে আঘাত করে কিনা স্থানীয়ভাবে গণনা করবে এবং যদি মনে হয় যে এটির কোনও আঘাত রয়েছে তবে এটি রক্তের পাফের মতো "আঘাত" প্রভাব ফেলে। এটি ক্লায়েন্টের পক্ষেই করা হয় যাতে প্লেয়ারটি তাত্ক্ষণিকভাবে তাদের ক্রিয়াটির প্রতিক্রিয়া দেখায়। আপনি যদি এটি না করেন তবে গেমটি পিছিয়ে যায়।
- এ সার্ভারে একটি বার্তাও প্রেরণ করে যে "আমি এই ভেক্টরটির সাথে গুলি চালিয়েছি"
- সার্ভারটি যখন বার্তাটি পায়, এটি আইটি কোথায় প্লেয়ারদের মনে করে তা দেখে এবং এটির শট ভেক্টর বি-কে আঘাত করে কিনা তা স্থির করে looks
- যদি সার্ভারটি একটি হিট বি সিদ্ধান্ত নেয়, তবে এটি বিটিকে হিট করার সিদ্ধান্ত নেয় এবং কী ঘটেছে তা বলে দুটি ক্লায়েন্টকে একটি বার্তা প্রেরণ করে।
- যদি সার্ভার সিদ্ধান্ত নেয় A বি কে আঘাত করেনি, বি ভাল আছে, এবং A "মিস করে"। তারা আঘাত করার মতো এটির দিকে তাকিয়ে থাকতে পারে ("আমি রক্তের পাফ দেখেছি!") তবে সার্ভাররা কল করেছে যে তারা মিস করেছে।
সুতরাং কোনও মিস বি কীভাবে তাদের আঘাত হানার মতো দেখায়? কারণ বি স্থানান্তরিত হতে পারে, কিন্তু এ এটি এখনও দেখেনি কারণ সার্ভারটি কোনও ক্লায়েন্টকে এখনও "বি এখানে স্থানান্তরিত হয়নি" বার্তা প্রেরণ করেছে।
ভালভের এই সম্পর্কে তাদের সাইটে একটি ভাল লেখার ব্যবস্থা রয়েছে। Http://developer.valvesoftware.com/wiki/Source_M মাল্টিপ্লেয়ার_ নেটওয়ার্কিং দেখুন