এখানে ইতিমধ্যে কয়েকটি উত্তর রয়েছে, তবে এখানে দেওয়া উত্তর যা ইউনিটি 3 ডি অ্যাকাউন্টে নেয় (উত্তরটি ইউনিটি 3 ডি-তে খুব নির্দিষ্ট, আমি বেশিরভাগ প্রসঙ্গেই এর বেশিরভাগ ক্ষেত্রেই করব):
সাধারণভাবে, ইউনিটি 3 ডি ব্যতিক্রমগুলি traditionতিহ্যগতভাবে ব্যবহার করে না। আপনি যদি ইউনিটি 3 ডি-তে কোনও ব্যতিক্রম ছুঁড়ে ফেলে থাকেন তবে এটি আপনার গড় .NET অ্যাপ্লিকেশনের মতো কিছুই নয়, এটি প্রোগ্রামটি থামায় না, বেশিরভাগই আপনি সম্পাদককে বিরতি দেওয়ার জন্য কনফিগার করতে পারবেন না। এটি সবেমাত্র লগইন হবে। এটি সহজেই গেমটিকে একটি অবৈধ অবস্থায় ফেলতে পারে এবং একটি ক্যাসকেড প্রভাব তৈরি করতে পারে যা ত্রুটিগুলি ট্র্যাক করতে অসুবিধে করে। সুতরাং আমি ityক্যের ক্ষেত্রে বলব, Add
একটি ব্যতিক্রম ছুঁড়তে দেওয়া একটি বিশেষভাবে অনাকাঙ্ক্ষিত বিকল্প।
তবে ব্যতিক্রমগুলির গতি পরীক্ষা করার সময় কিছু কিছু ক্ষেত্রে অকালীন অপ্টিমাইজেশনের ঘটনা নয় কারণ কিছু প্ল্যাটফর্মগুলিতে মনো কীভাবে ইউনিটিতে কাজ করে। আসলে, আইওএসের ইউনিটি 3 ডি কিছু উন্নত স্ক্রিপ্ট অপ্টিমাইজেশান সমর্থন করে এবং অক্ষম ব্যতিক্রমগুলি * এর মধ্যে একটির পার্শ্ব প্রতিক্রিয়া। এটি সত্যিই বিবেচনা করার মতো বিষয় কারণ এই অপটিমাইজেশনগুলি অনেক ব্যবহারকারীর পক্ষে খুব মূল্যবান প্রমাণিত হয়েছে, ইউনিটি 3 ডি-তে ব্যতিক্রমগুলির ব্যবহার সীমিত করার বিষয়ে বিবেচনা করার জন্য একটি বাস্তবসম্মত কেস দেখাচ্ছে। (* ইঞ্জিন থেকে ব্যতিক্রমগুলি পরিচালনা করে, আপনার কোড নয়)
আমি বলব যে ইউনিটিতে আপনি আরও বিশেষায়িত পদ্ধতির গ্রহণ করতে চাইতে পারেন। হাস্যকর ভাবে, এই লেখার সময় একটি খুব নিচে- ভোট উত্তর , শো ওয়ান ওয়ে আমি পারে ভালো কিছু বাস্তবায়ন বিশেষভাবে Unity3D প্রেক্ষাপটে (অন্যত্র ভালো কিছু সত্যিই অগ্রহণযোগ্য, এবং একতা এমনকি এটা মোটামুটি অসুন্দর এর)।
আমি যে অন্য পদ্ধতির বিষয়টি বিবেচনা করব তা হ'ল কলারের বিষয়ে যতটা সমস্যা রয়েছে ততক্ষণ কোনও ত্রুটি নির্দেশ করে না, বরং Debug.LogXX
ফাংশনগুলি ব্যবহার করা হচ্ছে । এইভাবে আপনি কোনও অজানা অবস্থায় কিছুটা লাইনে না রেখে ঝুঁকি ছাড়াই একটি নিয়ন্ত্রণহীন ব্যতিক্রম (যেমন ইউনিটি 3 ডি তাদের কীভাবে পরিচালনা করে) ফেলে দেওয়ার মতো আচরণ পান behavior এছাড়াও বিবেচনা করুন যদি এটি সত্যিই একটি ত্রুটি হয় (আপনার ক্ষেত্রে কোনও ত্রুটি অগত্যা একইভাবে দুটি বার লোড করার চেষ্টা করছে? বা Debug.LogWarning
এটি আরও প্রযোজ্য ক্ষেত্রে হতে পারে )।
এবং Debug.LogXX
ব্যতিক্রমগুলির পরিবর্তে ফাংশনগুলির মতো জিনিসগুলি ব্যবহারের ক্ষেত্রে , আপনাকে এখনও বিবেচনা করতে হবে যে যখন কোনও ব্যতিক্রম কোনও মান ফেরত দেয় (যেমন গেটম্যাটারিয়াল) থেকে ব্যতিক্রম হয় তখন কী হয় consider আমি ত্রুটিটি লগ করার সাথে নাল পাস করার মাধ্যমে এটির কাছে যেতে চাই ( আবার কেবলমাত্র onlyক্যে )। তারপরে আমি কোনও কোনও উপাদানের মতো কোনও নির্ভরতা কোনও নাল মান নয় তা নিশ্চিত করার জন্য আমার মনোবিহাইয়ার্সগুলিতে নাল চেক ব্যবহার করি এবং মনো-বিহেভিয়ারটি যদি তা হয় তবে এটি অক্ষম করে। একটি সাধারণ আচরণের জন্য উদাহরণ যা কয়েকটি নির্ভরশীলতার প্রয়োজন এটি হ'ল:
public void Awake()
{
_inputParameters = GetComponent<VehicleInputParameters>();
_rigidbody = GetComponent<Rigidbody>();
_rigidbodyTransform = _rigidbody.transform;
_raycastStrategySelector = GetComponent<RaycastStrategySelectionBehavior>();
_trackParameters =
SceneManager.InstanceOf.CurrentSceneData.GetValue<TrackParameters>();
this.DisableIfNull(() => _rigidbody);
this.DisableIfNull(() => _raycastStrategySelector);
this.DisableIfNull(() => _inputParameters);
this.DisableIfNull(() => _trackParameters);
}
SceneData.GetValue<>
আপনার উদাহরণের অনুরূপ এটি একটি অভিধানে একটি ফাংশনকে কল করে যা একটি ব্যতিক্রম ছুঁড়ে। তবে এটি কোনও ব্যতিক্রম ছুঁড়ে ফেলার পরিবর্তে এটি ব্যবহার করে Debug.LogError
যা একটি সাধারণ ব্যতিক্রমের মতো স্ট্যাক ট্রেস দেয় এবং নাল ফেরায়। * অনুসরণ করে এমন চেকগুলি অবৈধ অবস্থায় থাকা চালিয়ে যাওয়ার পরিবর্তে আচরণটি অক্ষম করবে।
* চেকগুলি দেখতে এমন কোনও ছোট সহায়তার কারণে আমি সেই গেমের অবজেক্ট অক্ষম করে যখন একটি ফর্ম্যাট বার্তা প্রিন্ট করে ব্যবহার করি **। if
এখানে কাজের সাথে সরল নাল চেকগুলি (** সহায়তার চেকগুলি কেবলমাত্র ডিবাগ বিল্ডগুলিতে সংকলিত রয়েছে)
_Materials.Add
একটি ব্যতিক্রম নিক্ষেপ?