দৃশ্যে এটি যুক্ত না করে কীভাবে একটি নতুন গেমবজেক্ট তৈরি করবেন?


10

আমি মূলত আমার নিজের প্রিফ্যাব সিস্টেমটি তৈরি করছি। গেম অবজেক্টগুলি একটি মানব পাঠযোগ্য ডেটা ফাইল দ্বারা সংজ্ঞায়িত করা হয়। আমি একটি খালি গেমওজেক্ট তৈরি করতে চাইছি, এটি ডেটা ফাইলে সংজ্ঞায়িত উপাদানগুলি দিয়ে লোড করুন এবং এটি প্রস্তুত এবং Instantiate()কলটির জন্য অপেক্ষা করতে চাই। যাইহোক, আমি যখনই GameObject go = new GameObject()একটি নতুন গেম অবজেক্ট ব্যবহার করি তখন দৃশ্যে যোগ করা হয়।

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

এর পিছনে যুক্তি হ'ল আমি এমন একটি তালিকা রাখতে চাই যাতে গেমওবজেক্টস রয়েছে, কিছু আমার customক্য প্রিফাবগুলি লোড করে এবং অন্যটি আমার কাস্টম প্রিফ্যাব সিস্টেম দ্বারা নির্মিত অন্যকে উত্পন্ন করে। এটি রান সময়ে ঘটতে হবে, এবং ইউনিটি সম্পাদককে জড়িত করতে পারে না (যেহেতু আদর্শ ব্যবহারকারীরা তাদের নিজস্ব ডেটা ফাইলগুলি সংজ্ঞায়িত করতে সক্ষম হবেন)।

ইউনিটি আমার জন্য স্বয়ংক্রিয়ভাবে এটি ইনস্ট্যান্ট না করে আমি কীভাবে একটি নতুন গেমওজেক্ট তৈরি করতে পারি?


উদাহরণস্বরূপ, আমি এই জাতীয় কল করতে পারি:

Resources.LoadAll("PrefabsDirectory", typeof(GameObject))

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


1
আমি ভয় পাচ্ছি তুমি পারবে না আমি মনে করি আপনাকে আপনার শ্রেণীর ইনস্ট্যান্টেশনটি বিলম্ব করতে হবে।
রবার্তো

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

@ কেভিনরইড ​​আমি বিশ্বাস করি যে এটি করার একমাত্র উপায় Destroyগেমওজেক্টটিতে কল করা। যা এটিকে দৃশ্য থেকে সরিয়ে এটিকে মুক্তি দেয়, এটি অকেজো করে তোলে।
মাইকেলহাউস

1
@ পান্ডপাজামার একটি ভাল ধারণা রয়েছে। কল করা go.SetActive(false)হ'ল একটি অবজেক্ট পুলের মতো কিছু তৈরি করার সেরা উপায়। এটি আপনি যা চান ঠিক তা নয়, তবে আপনার অ্যাক্টিভ অবজেক্টগুলির একটি ছোট গ্রুপ থাকতে পারে যা পরে আপনার কাস্টম ইনস্ট্যান্টেশনের জন্য ক্লোন করা হয়েছিল।
অ্যান্ড্রুএকেরেন

1
@ বাইট ৫6: আপনি কেন আপনার পছন্দসই প্রিফ্যাবগুলি প্রাক-ইনস্ট্যান্ট করতে চান এবং প্যাটার্নের মতো কোনও কারখানা ব্যবহার করে তাত্ক্ষণিকভাবে উড়ানের প্রয়োজনীয় উপাদানগুলি সহ জিও রচনা করবেন না? আমি যেটা বুঝেছিলাম তার জন্য আপনি ব্যবহারকারীদের "তাদের নিজস্ব ফাইল ফাইল" ব্যবহার করে প্রিফ্যাবগুলি "সিরিয়ালাইজ" করার অনুমতি দিতে চান, সুতরাং আপনাকে রান ফাইল সময়ে যে কোনও উপায়ে পড়তে হবে এবং প্রয়োজনীয় উপাদানগুলি ইনস্ট্যান্ট করতে হবে .. আমি কি কিছু মিস করছি?
হাইজেনবাগ

উত্তর:


6

আপনি গেমবজেক্টের হাইডফ্লে্যাগগুলি পরিবর্তন করতে পারেন?

আমি এটি চালানোর চেষ্টা করেছি:

GameObject myGameObject = new GameObject ();
myGameObject.name = "Obvious Name";

myGameObject.hideFlags = HideFlags.HideInHierarchy;

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


1
এটি, এটি অক্ষম করার সাথে যুক্ত (যাতে কোনও স্ক্রিপ্ট কার্যকর হয় না) কাজ করতে পারে। আমি এটি দিয়ে চেষ্টা করব এবং আপনাকে জানাবো। এটি এখনও প্রায় কাজ, তবে আমি মনে করি এই মুহুর্তে আমি যা রেখেছি। এবং, আমরা জানি সকলের জন্য, এটি অভ্যন্তরীণভাবে যা করা হয়েছিল তা হতে পারে, যদিও আমি সন্দেহ করি।
MichaelHouse

1
@ বাইট ৫6: আমি চেষ্টা করেছি এটিও একটি কর্মক্ষেত্র, তবে আমি আসলে এই দিনগুলিতে আবিষ্কার করেছি যে অ্যানিমেশনগুলির পূর্বরূপ দেওয়ার সময় ityক্য ঠিক একই কাজ করে: এটি দৃশ্যে লুকানো গেমোবজেক্টটি ইনস্ট্যান্ট করে এবং একটি ডেডিকেটেড ক্যামেরায় প্রিভিউ ফ্রেমে তাদের রেন্ডার করে। সুতরাং এটি এত পরিষ্কার শোনাচ্ছে না, তবে বাস্তবে এই সমাধানটি অভ্যন্তরীণভাবেও ব্যবহৃত হবে বলে মনে হচ্ছে।
হাইজেনবাগ

1
দেরী গ্রহণের জন্য দুঃখিত। আমি এটি বাস্তবায়নের প্রায় কাছাকাছি পেয়েছি এবং এটি দুর্দান্ত কাজ করে। ধন্যবাদ।
MichaelHouse

0

দুর্ভাগ্যক্রমে আপনি সেই সঠিক জিনিসটি করতে পারবেন না। তবে, আপনি কারখানার প্যাটার্নের মাধ্যমে একই নকশার প্যাটার্নটি (উদাহরণস্বরূপ, আপনার অবজেক্টগুলির বিল্ডিংকে দূরে সরিয়ে ফেলুন, এবং পরে কেবল একটি একক আদেশ দিয়ে তাদের কল করুন) করতে পারেন ।

আপনি যখন কোনও অবজেক্ট চান, এমন কিছু কল করুন Factory.CreateGameEntity()এবং সেই পদ্ধতিটি পর্দার আড়ালে সমস্ত কিছু পরিচালনা করবে।


এটি আপনি যতটা ভাবেন তার চেয়ে জটিল, এটি এত পরিষ্কার নয় making আমি একটি উত্তর পোস্ট করব সম্পূর্ণ বিবরণ হবে, তবে মূলত পার্সারটি বেশ জটিল হতে হবে। উদাহরণস্বরূপ, যদি আমি পরীক্ষা করতে চাই যে ইনস্ট্যান্ট করার আগে কোনও প্রিফাবের কোনও উপাদান রয়েছে কিনা, এটি যতটা সহজ GetComponent<>() != null। আমার ডেটা ফাইলগুলির সাথে, পার্সারকে ডেটাতে সঠিক উপাদানটি অনুসন্ধান করতে হবে। কোনও উপাদানগুলির অভ্যন্তর থেকে মান পাওয়ার জন্য একই। GameObjectবর্গ পার্সার দ্বারা সদৃশ করা প্রয়োজন যে কার্যকারিতা অনেক প্রদান করে।
মাইকেলহাউস

কেন এটি করা যায় না তার জন্য যদি আপনি প্রমাণ বা এমনকি কিছু যুক্তি সরবরাহ করতে পারেন তবে এটি এই উত্তরটি সম্পূর্ণ করে দেবে।
মাইকেলহাউস

আমি পরে দেখতে পাবেন যদি আমি এই সম্পর্কে কোনো নির্ধারক ডকুমেন্টেশন খুঁজে পেতে পারেন, এখন সব আমি এই ফোরামে থ্রেড আছে জানতে পারেন জন্য forum.unity3d.com/threads/... - answers.unity3d.com/questions/366273/... - answers.unity3d .কম / প্রশ্নগুলি / 19736 /…
ঝাঁকুনি দিচ্ছে

0

go = new GameObject();দৃশ্যে এটি যুক্ত না করে করার কোনও উপায় নেই ।

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

XML বা JSON এ সর্বাধিক আউটপুট তাই ফাইলটি লোড করতে এবং আপনার ইচ্ছামত এটিকে পরিচালনা করার জন্য এটি বেশ সোজা forward


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

-1

সঠিক উপায়টি একটি প্রিফ্যাব তৈরি করা, আপনি সেই প্রিফাবটিকে অবজেক্ট হিসাবে বরাদ্দ করেন, তারপরে আপনি যখনই ইনস্ট্যান্ট করতে চান কেবলমাত্র এই অবজেক্টের রেফারেন্সটি ব্যবহার করুন এবং এটি গেমওজেক্ট হিসাবে কাস্ট করবেন।

প্রাক্তন:

private Object prefab;


public static GameObject Create(void)
{
   return (Instantiate(prefab , position , rotation) as GameObject);
}

1
এটি বিদ্যমান প্রিফ্যাব সিস্টেমটি ব্যবহার করছে। আমার প্রশ্ন অনুসারে, আমি মূলত আমার নিজের প্রিফ্যাব সিস্টেম তৈরি করছি। প্রয়োজনীয়তার অংশটি হ'ল "ইউনিটি সম্পাদককে জড়িত করতে পারে না"। প্রিফ্যাব তৈরি করা ইউনিটি সম্পাদক ব্যবহার করে।
মাইকেলহাউস

আপনি যা করতে পারবেন না, আপনার নিজের ডেটা তৈরি করতে সক্ষম হবেন তখন তাদের এসডিকে ব্যবহার করে বিকাশকারীদের জন্য লাইসেন্স প্রয়োজন would আমি ভুল না হলে তারা কোনও কোডিং ব্লিং ছাড়াই তাদের কোড ভাগ করে নিবে। তবে আমি জানি কিছু লোক ইউনিটি থেকে তাদের নিজস্ব গেম ইঞ্জিনে দৃশ্য রফতানি করতে সক্ষম হয়েছে
এরিকুল

ভাল, এটি পরিষ্কারভাবে সম্ভব যেহেতু আমি নির্বাচিত উত্তর ব্যবহার করে নিজের প্রিফ্যাব সিস্টেম তৈরি করেছি। আমার প্রোফাইলে পাওয়া আমি যে কোর্সটি তৈরি করেছি তাতে কীভাবে এটি করতে হয় তা শিখতে পারেন।
মাইকেলহাউস

না ধন্যবাদ আমি একজন স্নাতকোত্তর গেম প্রোগ্রামার :) আপনার পক্ষে যদি এটি দুর্দান্ত হয় তবে গেমগুলি তৈরি করার দরকার নেই
এরিকুল

এটি এমন একটি সিস্টেম যা মূলত ব্যবহারকারীদের প্রিফাবগুলি তৈরি করতে দেয়। এটি মোডগুলি এবং অন্যান্য শেষ-ব্যবহারকারীর তৈরি সামগ্রীর জন্য গেমগুলিতে বেশ কার্যকর। (সুতরাং হ্যাঁ, আমি মনে করি এটি গেমস তৈরিতে বেশ কার্যকর)।
মাইকেলহাউস

-1

কোনও ভেরিয়েবলে প্রিফ্যাব লোড করার জন্য আপনি এটি পরে ইনস্ট্যান্ট করতে পারেন আপনি নিম্নলিখিত কোডটি ব্যবহার করবেন:

 GameObject ball = (GameObject)(Resources.Load ("myPrefab"));

আমি ityক্য 5.5 সহ একটি প্রকল্পে এটি করেছি। এটি তাত্ক্ষণিকভাবে উপলভ্য হবে তবে স্বাভাবিকের মতো তাত্ক্ষণিক না হওয়া অবধি দৃশ্যমানক্রমের অংশে বা অংশে নয়।


আমি মনে করি আপনি প্রশ্নটি ভুল পড়েছেন। এই উত্তরে ডিফল্ট প্রাকফ্যাব সিস্টেম ব্যবহার করা জড়িত । এই প্রশ্নটি একটি কাস্টম প্রিফ্যাব সিস্টেম তৈরির প্রসঙ্গে জিজ্ঞাসা করে , যেখানে এটি অ্যাক্সেসযোগ্য নয়। নীচের উদাহরণটি এর আরও আলোকপাত করে to
জেনমলক

"ইউনিটি আমার জন্য স্বয়ংক্রিয়ভাবে এটি ইনস্ট্যান্ট না করে আমি কীভাবে একটি নতুন গেমবজেক্ট তৈরি করতে পারি?" যে প্রশ্নটি জিজ্ঞাসা করা হয়েছিল এবং এই কোডটি এর উত্তর দিয়েছে। কাস্টম লোডিং সিস্টেমের সাথে কাঙ্ক্ষিত ফলাফলগুলি পেতে কোডটি পরিবর্তন করা যেতে পারে।
ডারথহক

এটি মূলত যা আমি প্রশ্নের অন্তর্ভুক্ত উদাহরণটিতে বর্ণনা করি। এবং এটি প্রিফাবগুলির জন্য দুর্দান্ত কাজ করে, তবে ডেটা ফাইল থেকে নতুন গেমের অবজেক্ট তৈরি করার জন্য নয়।
MichaelHouse
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.