ایجاد Tag یا برچسب برای ابجکت دلخواه در یونیتی
جمعه, ۳۰ مرداد ۱۳۹۴، ۰۴:۲۴ ق.ظ
gameover.blog.ir
تگ یا Tag عنی برچسب یا اسم مستعار.
توی html ما قبلا به چند تا ابجکت id می دادیم که ثابت بود و هر ابجکت یه
اسم ثابت داشت نمی تونستیم تغییرش بدیم ولی می تونستیم یه کلاس یا class
تعریف کنیم و همه ی ابجکت های لخواه رو از نوع اون کلاس تعریف کنیم یا
برچسب بزنیم. بعدش که میخواستیم تغییراتی روی اون ابجکت ها ایجاد کنیم دیگه
دستی اینکار سخت بود. کافی بود اسم اون کلاس رو داشته باشیم و خصوصیاتشو
دستکاری کنیم یا بهشون دستیابی داشته باشیم.
توی html چیزی بود تو مایه های tagByName یا tagByID که بهش ایدی میدادیم و
خودش همه رو لیست می کرد بعدش میریختیم توی ارایه و با یه حلقه ی تکرار به
کل ابجکت های ریخته شده توی ارایه دسترسی داشتیم و یه سری عملیات کلی روی
اونا انجام میدادیم.
مثلا من سه تا دوربین دارم:
cam1
cam2
cam3
--
به هر سه تاشون برچسب cam می زنم
بعدش با کدی مثل این همشون رو غیر فعال می کنم:
کد:
//Disable all cameras with tag 'cam'
var cameras = GameObject.FindGameObjectsWithTag("cam");
for (var cams : GameObject in cameras)
{
cams.GetComponent(Camera).enabled = false;
}
gameObject.Find("cam1").GetComponent(Camera).enabled = true;
دوربین رو فعال می کنم.
مثال :
تگ یا Tag عنی برچسب یا اسم مستعار.
توی html ما قبلا به چند تا ابجکت id می دادیم که ثابت بود و هر ابجکت یه اسم ثابت داشت نمی تونستیم تغییرش بدیم ولی می تونستیم یه کلاس یا class تعریف کنیم و همه ی ابجکت های لخواه رو از نوع اون کلاس تعریف کنیم یا برچسب بزنیم. بعدش که میخواستیم تغییراتی روی اون ابجکت ها ایجاد کنیم دیگه دستی اینکار سخت بود. کافی بود اسم اون کلاس رو داشته باشیم و خصوصیاتشو دستکاری کنیم یا بهشون دستیابی داشته باشیم.
توی html چیزی بود تو مایه های tagByName یا tagByID که بهش ایدی میدادیم و خودش همه رو لیست می کرد بعدش میریختیم توی ارایه و با یه حلقه ی تکرار به کل ابجکت های ریخته شده توی ارایه دسترسی داشتیم و یه سری عملیات کلی روی اونا انجام میدادیم.
توی unity یه چیز توی همون مایه ها هست یبه اسم tag.
مثلا من سه تا دوربین دارم:
cam1
cam2
cam3
--
به هر سه تاشون برچسب cam می زنم
بعدش با کدی مثل این همشون رو غیر فعال می کنم:
کد:
//Disable all cameras with tag 'cam'
var cameras = GameObject.FindGameObjectsWithTag("cam");
for (var cams : GameObject in cameras)
{
cams.GetComponent(Camera).enabled = false;
}
gameObject.Find("cam1").GetComponent(Camera).enabled = true;
دوربین رو فعال می کنم.
مثال :
ابتدا باید سه تا دوربین بذاریم و قبلش یه تگ بسازیم به اسم cam.
چطوری تگ میسازیم الان می گم :
بعدش هر دوربین رو انتخاب و تگ cam رو که توی مرحله ی قبلی ساختیم واسش توی inspector تنظیم یا set می کنیم. این کارو واسه هر سه دوربین باید انجام بدیم.
اسکریپت هم js بود که گفتم. روی هر سه دوربین اعمال کنید و بازی رو play کنید.
حالا با فشردن کلید 1 و 2 و 3 می تونید روی سه تا دوربین سوئیچ کنید و از سه زاویه صحنه رو مشاهده کنید.
آخرین تغییراتی که روی اسکریپت اعمال کردم اینه :
کد PHP:
//camSwitch.js
//-----------------------------------------------------------------------
function Update () {
if(Input.GetKey("1")){
Debug.Log("cam 1 active");
camSwap(1);
}
if(Input.GetKey("2")){
Debug.Log("cam 2 active");
camSwap(2);
}
if(Input.GetKey("3")){
Debug.Log("cam 3 active");
camSwap(3);
}
}
//-----------------------------------------------------------------------
function camSwap(currentCam : int)
{
//Disable all cameras with tag 'cam'
var cameras = GameObject.FindGameObjectsWithTag("cam");
for (var cams : GameObject in cameras)
{
cams.GetComponent(Camera).enabled = false;
}
//Enable camera number 'currentCam'
var oneToUse : String = "camera"+ currentCam;
gameObject.Find(oneToUse).GetComponent(Camera).enabled = true;
}
//---------
//---------
۹۴/۰۵/۳۰