“আপনি যে বিষয়টি ইনস্ট্যান্ট করতে চান তা বাতিল হয়” তবে এটি কাজ করে, আমি কি ত্রুটিটিকে উপেক্ষা করতে পারি?


18

আমার সাথে এটি কখনও ঘটেনি তাই আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি।

GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;

এটি ত্রুটি ছুঁড়েছে তবে বস্তুটি আসলে তাত্ক্ষণিকভাবে রয়েছে এবং সমস্ত কিছুই ইচ্ছাকৃতভাবে কাজ করে। তবুও ত্রুটিটি প্রোগ্রামটি থামায় না আমি যতবারই এটি পুনরুত্পাদন করি।

আমি কি এই ত্রুটিটিকে উপেক্ষা করতে পারি বা এমন কোনও সমস্যা আছে যা আমি দেখছি না?


32
আপনার ত্রুটি কখনও উপেক্ষা করা উচিত নয়। তারা সবসময় কোনও কারণে সেখানে থাকে;)
গ্যাব্রিয়েল ভিয়ার্টি

5
আমি কখনই ত্রুটিগুলিকে উপেক্ষা করার ধারণাটি দ্বিতীয় করতে চাই না কারণ এটি "" এটি কাজ করে "। সংজ্ঞা অনুসারে, যদি কোনও ত্রুটি থাকে তবে এটি কার্যকর হয় না। অবশ্যই, এটি আপনি যা করতে চান তা করতে পারে বলে মনে হয় তবে এর অর্থ হ'ল আপনি ভাঙাটি এখনও খুঁজে পান নি।
তহবিল মনিকার লসুইট

উত্তর:


46

Intantiate()লাইনটি ব্যতিক্রম ছুঁড়ে দেওয়া সত্ত্বেও যদি বস্তুটি সঠিকভাবে ইনস্ট্যান্ট করা হয় তবে স্ক্রিপ্টের অন্য একটি উদাহরণ থেকে ত্রুটিটি উপস্থিত হচ্ছে - আপনার ঘটনাক্রমে ঘটনাক্রমে দ্বিতীয় কপি থাকতে পারে।

একটি উদাহরণ সঠিকভাবে কনফিগার করা হয়েছে, এবং Instantiate()কোনও ত্রুটি ছাড়াই প্রত্যাশিত হিসাবে সম্পাদনা করা হচ্ছে, যাতে বস্তুটি পছন্দসই হিসাবে তৈরি হয়।

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

অবাঞ্ছিত দৃশ্যের সদৃশগুলি ট্র্যাক করতে সহায়তা করতে আপনি স্টার্টটিতে - বা আপত্তিজনক লাইনের ঠিক আগে নাল চেক করে প্রিন্ট করতে পারেন।

আপনার এই ত্রুটিটি একেবারেই উপেক্ষা করা উচিত নয়।

সর্বোপরি, এটি অকারণে গণনা চক্র জ্বলছে। সবচেয়ে খারাপ, এটি এমন একটি চিহ্ন যা আপনার গেমটি এমন কিছু করছে যা আপনি পুরোপুরি বুঝতে পারেন না এবং এটি লাইন থেকে অনেক বড় সমস্যার মূল হতে পারে।


12
+1, ত্রুটিগুলি সতর্কবার্তার মতো নয়, যদি কোনও ত্রুটি ঘটে থাকে তবে কখনই তা পুরো গেমটি ক্র্যাশ হয়ে যায় তা আপনি জানেন না।
টমটস্যাগ্ক

13
সতর্কতাগুলি এড়িয়ে চলা সবসময় নিরাপদ নয়। এমনকি যদি এটি ত্রুটি না হয় তবে এটি গেমটি ক্র্যাশ হয়ে যাওয়ার সম্ভাব্য অবস্থার দিকে নিয়ে যেতে পারে।
শান বার্টন

2
আমি @ সিয়ানবার্টনের সাথে একমত, সতর্কতা উপেক্ষা করা নিরাপদ অনুশীলন নয়। আপনার যদি কোনও সতর্কতা উপেক্ষা করা উচিত এবং কেবলমাত্র যদি আপনি বুঝতে পারেন যে এটি কী কারণ করছে এবং স্বাচ্ছন্দ্য বোধ করে যে এটি আপনার কোডে কোনও সমস্যা সৃষ্টি করছে না। তারপরেও, নিজেকে জিজ্ঞাসা করুন যে আপনি এটি আরও ভাল করে না করতে পারেন।
জ্যাক এইডলি

3
আমি একটি বড় টিমের সাথে কাজ করেছি এমন প্রতিটি প্রকল্পের কোনও এক পর্যায়ে "অজ্ঞ" সতর্কতা রয়েছে যে এটি জেনুইন ইস্যুতে মুখোশ দেওয়া শুরু করেছে over সুতরাং আমি অবশ্যই সতর্কতার সাথে গুরুতরভাবে চিকিত্সা করার পক্ষে ওকালতি করব, এবং যদি কেউ অপ্রয়োজনীয় হয় তবে প্রাসঙ্গিক লাইনের জন্য এটি অক্ষম করে একটি মন্তব্য সহ পরিষ্কারভাবে সংজ্ঞায়িত করা হচ্ছে যে কেন সেখানে সতর্কতা উত্পন্ন করা বাদ দেওয়া নিরাপদ।
ডিএমগ্রিগরি

1
আমি @ ডিএমজিগ্রোরির সাথে 100%, আমি কেবল খুব ছোট দলগুলিতেই কাজ করেছি, তবে সতর্কবার্তাটির জোড়ায় জোড় করে দেওয়া শুরু করা "জেনুইন" সমস্যাগুলি খুঁজে পাওয়া ভয়ঙ্কর হয়েছিল, বা আপনি সর্বদা তাদের মিস করবেন। আমার এমও হ'ল লগটি টেস্টিং ব্যতীত পরিষ্কার রাখতে হবে, এমনকি আমাকে প্লাগিনগুলির কোডে সতর্কতাগুলি অক্ষম করতে হবে (দয়া করে, সতর্কতার সাথে প্লাগিনগুলি কখনও তৈরি করবেন না), দীর্ঘকালীন আইএমওতে এটি আরও অনেক ভাল। সম্পাদনা: পরিষ্কার হওয়ার জন্য, সতর্কতাগুলি কখনই অক্ষম করবেন না যদি না আপনি 100% নিশ্চিত হন যে অন্য কোনও উপায় নেই (যা সময়ের সময়ের 0.001% হয়) তবে সর্বদা তাদের ঠিক করুন।
ত্রিসিবো

21

উত্তর

আপনার প্রশ্নের সরাসরি উত্তর দিয়ে আমাকে যাত্রা শুরু করুন:

এটি কাজ করে, আমি কি ত্রুটিটিকে উপেক্ষা করতে পারি?

আপনি পারে । আপনার করা উচিত নয়, কারণ এর অর্থ কিছু ভুল হচ্ছে। আপনি এই ত্রুটিটি করতে অভ্যস্ত হয়ে উঠবেন তবে এটি "লুকিয়ে" থাকতে পারে বা অন্য কোনও ত্রুটির কারণ হতে পারে।

বর্তমানে আপনার কাছে একটি ত্রুটি বার্তা রয়েছে এবং এটি এখনও সঠিকভাবে কাজ করে। অন্যান্য উপায় কাছাকাছি, এটা না কাজ করছে এবং হচ্ছে না (বরং বা: স্বীকৃতি নয়) প্রতিক্রিয়া কেন, অনেক খারাপ হয়!

পরামর্শ

এটি কোথা থেকে এসেছে তা জানতে, পুরো জিনিসটি কয়েকটি লাইনে ভাগ করুন।

string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;

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

string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);

কেন তা সন্ধান করা হচ্ছে

  • এখন, ইউনিটি অভিজ্ঞতার একটি বিট আমাদের বলে যে, দ্বারা ঘটিত হয় "অবজেক্ট আপনি instantiate করতে চান নাল হয়" Instantiate()
  • সুতরাং, এর মানে prefabহল null
  • সুতরাং এর অর্থ Resources.Loadফেরত null
  • এর জন্য ডকুমেন্টেশনটিResources.Load বলে " সম্পদ pathযদি এটি অন্যথায় পাওয়া যায় তবে তা বাতিল করে দেয় at "
  • সুতরাং এর অর্থ এটি প্রদত্ত পথটি খুঁজে পাবে না (আমি যে স্ট্রিংটি ডেকেছি resourceLocation)

এই পথটিতে কিছু ভুল আছে, তাই দেবুগ.লগের সাথে প্রকৃত প্রথম পদক্ষেপটি হ'ল এটি আসলে কী শেষ হয় তা দেখার জন্য to "সবকিছু যেমন ইচ্ছা মতো কাজ করে", এর সম্ভাব্য যে এখানে কিছু অনুলিপি চলছে যেখানে একটি সংস্করণ কাজ করে এবং অন্যটি আপনাকে এই ত্রুটি দেয়।

সেক্ষেত্রে ডিবাগ.লগের 2 প্যারামিটার সংস্করণটি ব্যবহার করা ভাল ধারণা Debug.Log(resourceLocation, gameObject);। এখন আপনি যদি ইউনিটি সম্পাদকের লগ বার্তায় ক্লিক করেন তবে GameObjectএটি কোথা থেকে এসেছে তা নির্বাচন করবে ।

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