ইউনিটিইজাইন.র্যান্ডম এবং সিস্টেম.র্যান্ডমের মধ্যে পার্থক্য কী?


24

এর মধ্যে কী আলাদা

int randomNumber = UnityEngine.Random.Range(0, 10);

এবং এই

// on top of the class
private System.Random _rnd = new System.Random();

// inside a methode of the same class
int randomNumber = _rnd.Next(0, 10);

আমি জানি যে System.Randomসর্বদা আপনার বর্গের শীর্ষে যা UnityEngine.Randomপ্রয়োজন তা নয় শীর্ষে থাকা উচিত । আমি আরও জানি যে System.Randomএকটি ইন্টার্ন "ক্লক" এর সাথে কাজ করে এবং "র্যান্ডম" নম্বরটি তার উপর ভিত্তি করে।

আমার প্রশ্ন এখন তার মাঝে কিছু অন্যান্য পার্থক্য হয় UnityEngine.Randomএবং System.Randomএবং জাদুকরী কোড একটি ঐক্য প্রকল্পের জন্য ব্যবহার করতে ভাল?

উত্তর:


23

যুক্তিযুক্তভাবে সবচেয়ে গুরুত্বপূর্ণ পার্থক্যটি হ'ল Unক্য Random.Rangeস্থিতিশীল থাকার কারণে ব্যবহার করা কিছুটা সহজ। সি # বেস শ্রেণির গ্রন্থাগার System.Random, তবে আপনাকে আরও নিয়ন্ত্রণ এবং বিচ্ছিন্নতার প্রস্তাব দেয়।

এটা সম্ভব তারা হুডের বিভিন্ন বাস্তবায়নও ব্যবহার করে (যদিও আমার ধারণা হবে যে ইউনিটির Randomjustক্য কেবলমাত্র সিস্টেমের ক্ষেত্রে প্রয়োগ করা হয়েছে Random), তবে সম্ভবত এটি উল্লেখযোগ্য উদ্বেগ নয়। মৌলিকভাবে তারা উভয়ই একই ধরণের এলোমেলো সংখ্যার জেনারেটর: কিছু বীজ দ্বারা সংজ্ঞায়িত ক্রম পুনরাবৃত্ত করার উপর ভিত্তি করে একটি সিউডো-র্যান্ডম জেনারেটর)।

নিয়ন্ত্রণ সমস্যাটি আরও প্রাসঙ্গিক, কারণ কিছু প্রসঙ্গে আপনি বিভিন্ন জিনিসের জন্য বিভিন্ন এলোমেলো স্ট্রিম ব্যবহার করতে পারেন। উদাহরণস্বরূপ, লক-স্টেপ নেটওয়ার্কিং নেটওয়ার্কিং প্রসঙ্গে আপনি গেমের সমস্ত খেলোয়াড় জুড়ে এলোমেলো গেমপ্লে-প্রভাবিত ইভেন্ট তৈরি করতে ব্যবহৃত বীজটি ঠিক করতে চাইতে পারেন, তবে আপনি বিশুদ্ধরূপে ব্যবহৃত এলোমেলো সংখ্যার প্রবাহ সম্পর্কে এতটা যত্ন নিতে পারেন না may ভিজ্যুয়াল ইভেন্টগুলি এবং সেই স্ট্রিমটিকে আরও বেশি traditionalতিহ্যবাহী ফ্যাশনে বীজ দেওয়ার অনুমতি দিতে পারে (উদাহরণস্বরূপ গেম লঞ্চে সিস্টেম আপটাইম সহ)।

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

শেষ অবধি, সাধারণভাবে এক বা অন্যটি ব্যবহার করা ভাল নয় , বরং সেখানে বিভিন্ন উপকারিতা এবং বিপরীতে রয়েছে। যখন ঘটতে পারে এমন অন্যান্য সম্ভাব্য র্যান্ডম সিকোয়েন্সগুলি থেকে সংখ্যার ক্রমটি আলাদা করতে হবে বা যখন আপনার সিকোয়েন্সের বীজের উপর স্থানীয় নিয়ন্ত্রণের প্রয়োজন হবে তখন এর উদাহরণ ব্যবহার করুন System.Random। যদি আপনার কেবলমাত্র একটি নিক্ষেপযোগ্য ব্যবহার বা অন্য কোনও প্রভাববিহীন দৃশ্যের জন্য দ্রুত এবং নোংরা র্যান্ডম মান প্রয়োজন হয় তবে ityক্যের সরলীকৃত Randomসম্ভবত খুব ভাল fine


3
কিছু গেম একটি কাজ করে, প্লেয়ার যখন গেমটি বাঁচায় তখন বীজের মান সংরক্ষণ করুন value এইভাবে, একই ক্রিয়াগুলি একই পরিণতির দিকে নিয়ে যায়। এটি স্কামিং বাঁচাতে নিরুৎসাহিত করে এবং আপনি যদি পরবর্তী সময়ে সংরক্ষণ করতে ভুলে যান তবে আপনি যেখানে আগে ছিলেন সেখানে ফিরে যেতে পারেন। সর্বশেষ এক্সকোম এটি করেছিল।
গ্রেগরোস

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

10

ইউনিটিইজাইন.র্যান্ডম ব্যবহারের কয়েকটি সুবিধা সহজেই রয়েছে:

  • স্ট্যাটিক / বিশ্বব্যাপী অ্যাক্সেসযোগ্য - আপনার প্রতিটি বস্তু বা সিস্টেমের জন্য এলোমেলো প্রয়োজনের জন্য কোনও উদাহরণ তৈরি করার দরকার নেই। আপনার বেশিরভাগ বা সমস্ত স্ক্রিপ্ট এই সংস্থানটি ভাগ করতে পারে।

  • সুবিধাপ্রাপ্ত পদ্ধতি - আপনি নিজের গণিত রোল না করে বিভিন্ন দরকারী ধরণের সুন্দর-বিতরণ এলোমেলো মান পেতে র্যান্ডম.রেঞ্জ (), র্যান্ডম.ইনসাইড ইউনিটস্পিয়ার, র্যান্ডম.রোটেশন ইউনিফর্ম, র্যান্ডম.ক্লোরএইচএসভি () ব্যবহার করতে পারেন।

(ইউনিটিইজাইন।র্যান্ডম কোনও ক্রস-প্ল্যাটফর্মের সামঞ্জস্যতা সিস্টেমের মনো বাস্তবায়নের চেয়ে পৃথক গ্যারান্টি সরবরাহ করে কিনা সে সম্পর্কে আমি কোনও নিশ্চিতকরণ পাইনি) - এগুলি হুডের অধীনে হতে পারে বা নাও হতে পারে)

আপনি অবশ্যই নিজের ক্লাস তৈরি করতে পারেন যা সিস্টেম.র্যান্ডম (বা অন্য একটি গ্রন্থাগার, বা আপনার নিজস্ব পিআরএনজি) ব্যবহার করে, তবে চমৎকার অংশটি আপনার দরকার নেই - ইউনিটির বাস্তবায়ন আপনাকে একটি ভাল বেসলাইন দেওয়ার জন্য বোঝানো হয়েছে বাক্সের বাইরে এলোমেলো আচরণ

এটি বলেছিল, এমন কিছু ঘটনা রয়েছে যেখানে আপনি এলোমেলোতার অন্যান্য উত্সগুলি ব্যবহার করতে চান:

  • আপনি যদি একাধিক থ্রেড ব্যবহার করছেন তবে বিতর্ক এড়াতে প্রতিটি থ্রেডের নিজস্ব সিউডোর্যান্ডমনেসের নিজস্ব উত্স থাকা উচিত (ইউনিটিইজাইন.র্যান্ডম কেবল মূল থ্রেডে অ্যাক্সেসযোগ্য)

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

  • সুরক্ষা, জুয়া বা অনন্য আইডি তৈরির জন্য যদি আপনার ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী এলোমেলো প্রয়োজন হয় তবে এই উদ্দেশ্যে আপনার বিশেষায়িত গ্রন্থাগার ব্যবহার করা উচিত। ইউনিটিইজাইন না র্যান্ডম বা সিস্টেম না.র্যান্ডম পর্যাপ্ত মানের গ্যারান্টি সরবরাহ করে না।


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

ক্রিপ্টো-গ্রেডের এলোমেলোতার জন্য আরএনজিক্রিপ্টো সার্ভিস প্রোভাইডার দেখুন তবে মনে রাখবেন যে এটি খুব ধীর এবং এটি ইউনিটির সমস্ত স্ট্রিট .NET প্ল্যাটফর্ম থেকে বাদ পড়েছে।
ম্যাকগুয়ারভি 10

6

ইউনিটিইজাইন.র্যান্ডম স্থির। আপনি যদি একটি এলোমেলো সংখ্যা জেনারেটরের একাধিক উদাহরণ তৈরি করতে চান তবে আপনি System.Random ব্যবহার করতে চাইবেন।

ইউনিটি বাস্তবায়নের জন্য উত্স কোডটি দেখার কোনও উপায় নেই, তবে মাইক্রোসফ্ট সিস্টেম.র্যান্ডম এর উত্স সরবরাহ করে ।


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