استفاده از بافتهای رندر برای نمایش محتویات صحنهای دیگر به عنوان بافت

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط تایید

ویندوز
  • ویندوز 11
ویرایشگر یونیتی
  • دانلود: 2021.3.3f1
بسته سیستم ورودی
  • 1.3.0

پیشنیازهای این نکته

تنظیمات زیر از قبل به عنوان یک فرض برای توصیف این نکته ساخته شده است.

در ابتدا

Render Textures به شما اجازه می دهد تا نقاشی های خود را به جای صفحه نمایش به یک بافت بنویسید. این اجازه می دهد تا شما را به ازادانه تولید بافت در طول اجرای بازی بدون اماده سازی تصاویر بافت در پیشبرد.

شما همچنین می توانید به یک بافت رندر بنویسید که به صورت پویا هر فریم را تغییر می دهد، به عنوان مثال، برای نشان دادن یک تصویر متفاوت از دوربین اصلی بر روی صفحه نمایش که در بازی وجود دارد.

اماده سازی تصاویر

هنگام استفاده از بافت رندر، نیازی به اماده سازی یک تصویر نیست، اما می توانید ان را به عنوان یک نمونه اماده کنید تا نتیجه نقاشی را اسان تر درک کنید.

ایجاد یک Render Texture

یک دارایی از پروژه ایجاد کنید. از Create، Render Texture را انتخاب کنید.

این نام می تواند خودسرانه باشد. از انجا که نام به طور مستقیم از NewRenderTexture خارج در این زمان مشخص نشده است، ترک به عنوان .

بافت رندر را انتخاب کنید و اندازه ان را از بازرس مشخص کنید. از انجا که بافت رندر یک منطقه طراحی است، شما باید یک اندازه را مشخص کنید. این بار، من می خواهم یک صحنه را به طور جداگانه ایجاد کنم، بنابراین نسبت ابعاد را به 16:9 تنظیم می کنم.

Render Texture Destination (مقصد رندر Texture Destination)

"UI" را > "Raw Image" از سلسله مراتب صحنه ای که در ابتدا ایجاد شده است انتخاب کنید. نمایش محتویات بافت رندر در این شیء. این یک شی از UI است، اما انچه شما نیاز دارید یک جزء "تصویر خام" است که می تواند به یک شی دیگر تنظیم شود.

RawImage قرار داده شده است. از انجا که این یک شیء UI است، در یک بوم قرار می دهد. من هنوز چیزی را تنظیم نکرده ام، بنابراین فقط یک مستطیل سفید دارم.

ما می خواهیم مقیاس برابر با یکدیگر باشد، بنابراین اندازه شیء RawImage را همانند بافت رندر تنظیم می کنیم. اگر نسبت ابعاد را یکسان نگه دارید، نتیجه نقاشی تنها در صورتی که اندازه را تغییر دهید، مقیاس می شود، اما اگر نسبت ابعاد را تغییر دهید، نتیجه نقاشی به صورت عمودی یا افقی خرد می شود.

جزء تصویر خام شیء RawImage دارای یک "بافت" است، بنابراین بافت رندر را که در انجا ایجاد کرده اید تنظیم کنید. محتویات بافت رندر هنوز خالی است، بنابراین در دید شفاف هستند.

ایجاد صحنه ای از محتوای ترسیم بافت رندر

بعد، یک صحنه جدید برای ایجاد محتوایی که در بافت رندر کشیده می شود، ایجاد کنید. File را از منو انتخاب کنید و New Scene را انتخاب کنید.

از انجا که این نمونه 2D است، شما یک صحنه 2D را نیز انتخاب خواهید کرد.

ان را در پوشه صحنه ایجاد کنید. SampleSceneTexture نام را به عنوان .

پس از ایجاد صحنه، اشیاء را به طور مناسب قرار دهید. تنها کاری که باید انجام دهید این است که مطمئن شوید محتوای render texture را می دانید. به منظور تایید اینکه هر چیزی که در خارج از دوربین بیرون زده است کشیده نمی شود، یک روح نیز در نزدیکی قاب دوربین قرار می گیرد.

اگر اشیاء همپوشانی داشته باشند، زمینه اشیاء نامشخص خواهد بود، بنابراین اگر پس زمینه دارید، ترتیب لایه های پس زمینه را کاهش دهید.

پس از انتخاب "MainCamera"، بافت رندر را در "بافت هدف" تنظیم کنید. این باعث می شود که نقاشی در بافت رندر کشیده شود.

حذف جزء شنونده صوتی مجموعه ای به MainCamera. تنها چیزی که برای بافت رندر نیاز دارید طراحی است، بنابراین نیازی به شنونده صوتی ندارید. هشدار نمایش داده خواهد شد اگر چند "شنوندگان صوتی" در زمان اجرا وجود دارد.

به هر حال، اگر صحنه را برای بافت رندر در این حالت اجرا کنید، هیچ چیز بر روی صفحه نمایش نمایش داده نمی شود. این به این دلیل است که شما در حال کشیدن یک بافت رندر هستید. اگر می خواهید ان را بر روی صفحه نمایش بررسی کنید، "بافت هدف" را حذف کنید و سپس ان را اجرا کنید.

تنظیمات لایه

در این نمونه، شما باید دو صحنه را همزمان حرکت دهید، اما اگر انها را همانطور که هستند حرکت دهید، محتویاتی که در بافت رندر کشیده می شوند نیز بر روی صفحه اصلی نمایش داده می شوند، بنابراین لایه ها به طور جداگانه کشیده نمی شوند.

ابتدا "Edit Layer" را از لایه در گوشه سمت راست بالای ویرایشگر انتخاب کنید.

نام و مکان دلخواه هستند، اما در اینجا ما یک لایه جدید RenderTarget به نام اضافه خواهیم کرد.

پس از اضافه کردن لایه، صحنه را برای بافت رندر باز کنید، تمام اشیاء مورد نظر خود را انتخاب کنید و مقدار لایه را به چیزی که ایجاد کرده اید تغییر دهید RenderTarget .

SampleSceneTexture این به ویرایش صحنه پایان می دهد، بنابراین لطفا ان را ذخیره کنید.

نمایش بافتهای رندر

SampleScene هنگامی که یک صحنه را باز کردید، ان را با کشیدن و رها کردن صحنه به سلسله مراتب SampleSceneTexture اضافه کنید. سپس باید دو صحنه در سلسله مراتب وجود داشته باشد و محتویات صحنه باید بر روی SampleSceneTexture صفحه نمایش داده شود.

SampleSceneTexture محتوای صحنه نگران کننده است، بنابراین روی نماد چشم صحنه از SampleSceneTexture سلسله مراتب کلیک کنید. SampleSceneTexture این کار اشیاء را در صحنه پنهان می کند و فقط محتویات صحنه قابل مشاهده خواهد SampleScene بود. به هر حال، از انجا که تمام تنظیمات بافت رندر تکمیل شده است،SampleScene محتویات بافت رندر باید در تصویر خام قرار داده شده در صحنه نمایش داده شود.

با این حال، پنهان شدن توسط ایکون چشم تنها یک تنظیم است که ان را در ویرایشگر نامرئی می کند، بنابراین اگر بازی را همانطور که هست اجرا SampleSceneTexture کنید، محتویات صحنه نیز بر روی صفحه نمایش نمایش داده می شود. SampleScene سپس Scene را Main Camera انتخاب کرده و گزینه From RenderTarget Culling Mask in the Inspector را انتخاب Camera کنید. این مانع از نمایش اشیاء در لایه هنگام RenderTarget اجرای بازی می شود.

سعی کنید بازی را اجرا کنید. باید همانطور که در نظر گرفته شده است ظاهر شود.

سعی کنید بافت رندر را جابهجا کنید

با این حال، در این حالت، دشوار است بدانیم که ایا واقعا به عنوان یک بافت رندر کار می کند یا به سادگی تصویر را به عنوان یک محصول نمایش می دهد، بنابراین اجازه دهید ان را حرکت دهیم.

محتوا می تواند هر چیزی باشد، اما در اینجا ما حرکت را به طور خودکار چرخش روح تنظیم می کنیم. یک اسکریپت ایجاد کنید SelfRotate و ان را به عنوان ایجاد کنید.

در اینجا، ما یک فرایند ساده چرخش خود را کم کم خواهیم داشت.

using UnityEngine;

public class SelfRotate : MonoBehaviour
{
  // 更新はフレームごとに 1 回呼び出されます
  void Update()
  {
    transform.Rotate(0, 0, 0.1f);
  }
}

پس از ایجاد اسکریپت، بیشتر و بیشتر به شیئی که می خواهید بچرخانید متصل کنید.

سپس بازی را اجرا کنید و ببینید ایا می چرخد. من فکر می کنم شما می توانید ببینید که جسم در حال حرکت در بافت رندر است.

چگونه چندین صحنه را همزمان حرکت دهیم

در اینجا، ما یک مثال ساده ایجاد کردیم تا دو صحنه از ابتدا اجرا شود، اما در یک بازی واقعی، موارد زیادی وجود دارد که شما باید با یک صحنه شروع کنید. در این صورت، من فکر می کنم که شما باید به طور پویا صحنه ها را در ابتدای صحنه اضافه کنید تا ان را چندین صحنه کنید.

لطفا به "اضافه کردن یک صحنه" برای توضیح نحوه اضافه کردن یک صحنه مراجعه کنید. اساسا، SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); تماس باید بیشتر مشکلات را حل کند.

چگونه برای جلوگیری از محتویات یک بافت رندر از ظاهر شدن بر روی صفحه اصلی بدون استفاده از لایه ها

محتوای بافت رندر بر روی صفحه اصلی نمایش داده می شود زیرا صحنه اصلی و صحنه بافت رندر در یک مکان قرار دارند. بنابراین، اگر محتویات بافت رندر را به مکانی منتقل کنید که هرگز در صحنه اصلی نشان داده نمی شود، در صفحه اصلی نمایش داده نمی شود. به عنوان مثال، شما می توانید یک شی یا دوربین بافت رندر را به مکان (-10000، -10000) منتقل کنید. به این ترتیب، تنظیمات لایه غیر ضروری است.

هنگامی که می خواهید محتویات یک بافت رندر را در یک صحنه بدون تقسیم ان به صحنه های مختلف تکمیل کنید.

این کار با استفاده از همان روش قبلی بدون لایه انجام می شود. شما می توانید محتوای نمایش داده شده توسط بافت رندر را به جایی منتقل کنید که هرگز در دوربین اصلی نمایش داده نشود. تفاوت از روش جدا کردن صحنه ها این است که شما باید دو دوربین را قرار دهید، اما به غیر از ان، شما اساسا تنظیمات مشابه روش جدا کردن صحنه ها را خواهید داشت.

اگر می خواهید محتوای گرفته شده از دیدگاه های مختلف در یک بازی 3D را به عنوان یک بافت رندر ضبط کنید

این نکته در مورد 3D صحبت نمی کند زیرا بر روی 2D متمرکز شده است، اما رویکرد اساسا یکسان است. از انجا که شما یک فضای سه بعدی را از دیدگاه های مختلف طراحی می کنید، نیازی به بیش از دو صحنه ندارید. تنها کاری که باید انجام دهید این است که هر تعداد دوربین را که نیاز دارید قرار دهید، مقصد طراحی را به عنوان بافت رندر تنظیم کنید و محل نمایش بافت رندر را تنظیم کنید.