সুতরাং আমি সম্প্রতি এটিতে আমার হাতটি চেষ্টা করেছিলাম এবং আপনার ছেলেরা যে একই সমস্যাগুলি পেয়েছি into রেন্ডার টেক্সচার সলিউশনটি একটি রেড হেরিং of আমি আলাদা থ্রেডে মাল্টিথ্রেডিং পিক্সেল ম্যানিপুলেশন ব্যবহার করে এটি সমাধান করতে সক্ষম হয়েছি।
https://www.youtube.com/watch?v=T_zpFk1mdCI
সুতরাং সাধারণভাবে graphics.blit()
রেন্ডার টেক্সচারটি যেখানেই যেতে হবে সেখানে ব্যবহার করা হবে এবং লাইটম্যাপ ডেটা টেক্সচার সমর্থন করে না, তাদের টেক্সচার 2 ডিএস প্রয়োজন। পরবর্তী যৌক্তিক পদক্ষেপটি হবে কোনও টেক্সচার 2 ডি তে ডেটা অনুলিপি করা এবং তারপরে লাইটম্যাপের ডেটাতে ফিড করা। এই কৌশলটি ফ্রেম রেটগুলিকে নষ্ট করে দেয় কারণ এটি সিপিইউতে ডেটা কেবলমাত্র উল্লেখের চেয়ে ডেটা প্রেরণে জিপিইউ স্টল করছে st
সমাধানটি তখন জিপিইউ ব্যবহার না করা।
দীর্ঘ সময় ধরে হালকা মানচিত্রের স্থানান্তর ঘটে তাই প্রতিটি ফ্রেমের হালকা মানচিত্র আপডেট করা অগত্যা গুরুত্বপূর্ণ নয়। প্রকৃতপক্ষে, খেলোয়াড়রা সম্ভবত খেয়াল করবেন না যদি হালকা মানচিত্রগুলি প্রতি খেলার সময় প্রতি 20-40 মিনিটে আপডেট হয়।
সুতরাং আপনি যা করছেন তা হ'ল প্রতিটি হালকা মানচিত্রের জন্য পৃথক থ্রেডে সিপিইউতে টাস্কটি প্রকাশ করা।
সাধারণত ityক্য মাল্টিথ্রেডিং সমর্থন করে না। তবে এটি ঠিক আছে, সি # করে। এই লোকটি অসাধারণ কাজটি ইউনিটিতে মাল্টিথ্রেডিংয়ের ব্যাখ্যা দেয়, সুতরাং আপনি যদি এটির কথাটি কখনও শুনেন নি, বা Unক্যতে কীভাবে মাল্টিথ্রেড করবেন তা কখনই জানতেন না এটি এই ভিডিও:
https://www.youtube.com/watch?v=ja63QO1Imck
আপনাকে যা করতে হবে তা হ'ল একটি কর্মী থ্রেড বর্গ তৈরি করা যা কালার অ্যারেগুলিতে লাইটম্যাপ পিক্সেল ডেটার অনুলিপি পরিবর্তিত করে এবং তারপরে একটি মিশ্রণ ফাংশন তৈরি করে।
এক রঙ থেকে পরের রঙের জন্য একটি সরল লির্প করবে।
তারপরে থ্রেডটি তৈরি করুন, এটি শুরু করুন, এবং সমস্ত লাইটম্যাপগুলি পৃথক থ্রেডে সমাপ্ত হলে আপনি পিক্সেল ডেটা লাইটম্যাপ ডেটা টেক্সচার 2 ডি তে আবার অনুলিপি করতে পারবেন।
আমি নীচে কিছু উদাহরণ কোড পোস্ট। এটি অবশ্যই পুরোপুরি বাস্তবায়িত সংস্করণ নয়, তবে এটি আপনাকে ক্লাস তৈরির, থ্রেডটি তৈরি করার এবং লাইটডেটা সেট করার মূল ধারণাটি দেখায় shows
আপনার অন্যান্য যে কাজগুলি করতে হবে তা হ'ল লাইট ম্যাপগুলি আপডেট করার ট্রিগার করার জন্য প্রায়শই একটি ফাংশন কল করা। এছাড়াও আপনাকে হয় শুরুতে বা সংকলনের সময়ে পিক্সেল সংক্রান্ত সমস্ত ডেটা শ্রমিক শ্রেণিতে কপি করতে হবে। এই যে কেউ এটি শুভকামনা। আমি অনুভব করি যে অপটি তাদের জীবন নিয়ে এগিয়ে গেছে তবে আমি জানি যে একই ধরণের সমস্যাযুক্ত অন্যান্য ব্যক্তিরা এটি নিয়ে হোঁচট খেতে পারে।
public class work
{
Color[] fromPixels;
Color[] toPixels;
public float LerpValue = 0;
public bool Finished = false;
public Color[] mixedPixels;
public work(Color[] FromPix, Color[] ToPix)
{
fromPixels= FromPix;
toPixels= ToPix;
Finished = false;
mixedPixels = new Color[FromPix.Length];
}
public void DoWork()
{
for (int x = 0; x < fromPixels.Length; x++)
{
mixedPixels[x] = Color.Lerp(fromPixels[x], toPixels[x], LerpValue);
}
Finished = true;
}
}
IEnumerator LightMapSet()
{
Thread workerThread = new Thread(someworker.DoWork);
someworker.LerpValue = lerpValue;
workerThread.Start();
yield return new WaitUntil(() => someworker.Finished);
mixedMap.SetPixels(someworker.mixedPixels);
mixedMap.Apply(true);
LightmapData someLightmapData;
someLightmapData.lightmapColor = mixedMap;
lightDatas = { someLightmapData};
LightmapSettings.lightmaps = lightDatas;
}