سوئیچ بین دوربین ها در یونیتی/تغییر دوربین در یونیتی/سوئیچ بین چند دوربین در یونیتی
چهارشنبه, ۱۳ آبان ۱۳۹۴، ۰۷:۱۶ ب.ظ
منبع:gameover.blog.ir
روش یک:
دو متغیر از نوع Camera تعریف کنید که public باشن.
بعدش دو دوربین بذارید توی صحنه و هر دو رو درگ کنید روی متغیرهای cam1 و cam2 مثالمون.
بعدش کد مثل این رو داریم که اگه 1 یا 2 زدیم سوئیچ کنه بین دو دوربین:
روش دو:
نکته: کد به زبان js هست. هرچند کد سیشارپ رو توصیه می کنم اما به علت کمبود وقت سرعتی کپی کردم.
شما سعی کنید حتما کد رو به سیشارپ تغییر بدید چون ساختار سیشارپ خیلی بهتر و استاندارد تر هست و م کلا js(جاوااسکریپت) رو توصیه نمی کنم.(اکثر حرفه ای ها هم بعد از مدتی به سیشارپ روی می آرن . شاید فکر کنید سخته اما من قول میدم بعدا می فهمید سیشارپ حتی از js آسونترم هست و لذت می برید)
اگه به مشکلی برخوردید بپرسید.
کد بالا یه کار تمیز هست فعلا کامل نیست . فقط اومده صورت مسئله رو ساده
کرده و می گه اگه "1" زدیم عدد 1 رو بده به ورودی تابعی به نام camSwap که
جلوتر کدهاشو میاریم واسه سوئیچ دوربین روی ابجکت دلخواه.
ما فرض کردیم توی پروژه خودمون سه تا دوربین به اسم "cam" داریم و توی
اسکریپت فوق با استفاده از GetComponent دوربین ها رو موقتا غیر فعال می
کنیم.
حالا دوربین دلخواه رو کدی که در ادامه میاریم به عنوان دوربین جاری فعال می کنیم :
یادتون نره اسم دوربین ها رو Camera1, Camera2, Camera3 بذارید.
اینک اسکریپت کامل به دو زبان :
منبع اصلی:
http://promakers.ir/showthread.php?tid=8769
www.unity3dstudent.com/2010/12/switching-cameras-at-runtime/
روش یک:
دو متغیر از نوع Camera تعریف کنید که public باشن.
بعدش دو دوربین بذارید توی صحنه و هر دو رو درگ کنید روی متغیرهای cam1 و cam2 مثالمون.
بعدش کد مثل این رو داریم که اگه 1 یا 2 زدیم سوئیچ کنه بین دو دوربین:
public GameObject cam1,cam2; void Update () { if(Input.GetKey("1")){ Debug.Log("Using Camera 1"); cam1.SetActive(true); cam2.SetActive(false); } if(Input.GetKey("2")){ Debug.Log("Using Camera 2"); cam2.SetActive(true); cam1.SetActive(false); } }
روش دو:
نکته: کد به زبان js هست. هرچند کد سیشارپ رو توصیه می کنم اما به علت کمبود وقت سرعتی کپی کردم.
شما سعی کنید حتما کد رو به سیشارپ تغییر بدید چون ساختار سیشارپ خیلی بهتر و استاندارد تر هست و م کلا js(جاوااسکریپت) رو توصیه نمی کنم.(اکثر حرفه ای ها هم بعد از مدتی به سیشارپ روی می آرن . شاید فکر کنید سخته اما من قول میدم بعدا می فهمید سیشارپ حتی از js آسونترم هست و لذت می برید)
اگه به مشکلی برخوردید بپرسید.
Switching Cameras at runtime
برای تغییر دوربین در بازی میخوام الگوریتم یا راهکاری رو برای حل این مسئله یاد بدم با توجه به تحقیقاتم.
اصل کار اینطوری هست :
کد js:
function Update(){ if(Input.GetKey("1")){ Debug.Log("Using Camera One"); camSwap(1); } } function camSwap(currentCam : int){ }
کد js:
function camSwap(currentCam : int){ var cameras = GameObject.FindGameObjectsWithTag("cam"); for (var cams : GameObject in cameras){ cams.GetComponent(Camera).enabled = false; } }
حالا دوربین دلخواه رو کدی که در ادامه میاریم به عنوان دوربین جاری فعال می کنیم :
کد js:
var oneToUse : String = "Camera"+currentCam; gameObject.Find(oneToUse).GetComponent(Camera).enabled = true;
اینک اسکریپت کامل به دو زبان :
کد js:(توصیه نمی کنم)
//js function Update () { if(Input.GetKey("1")){ Debug.Log("Using Camera One"); camSwap(1); } if(Input.GetKey("2")){ Debug.Log("Using Camera Two"); camSwap(2); } if(Input.GetKey("3")){ Debug.Log("Using Camera Three"); camSwap(3); } } function camSwap(currentCam : int){ var cameras = GameObject.FindGameObjectsWithTag("cam"); for (var cams : GameObject in cameras){ cams.GetComponent(Camera).enabled = false; } var oneToUse : String = "Camera"+currentCam; gameObject.Find(oneToUse).GetComponent(Camera).enabled = true; }
کد csharp:
//csharp using UnityEngine; using System.Collections; public class camControl : MonoBehaviour { void Update () { if(Input.GetKey("1")){ Debug.Log("Using Camera One"); camSwap(1); } if(Input.GetKey("2")){ Debug.Log("Using Camera Two"); camSwap(2); } if(Input.GetKey("3")){ Debug.Log("Using Camera Three"); camSwap(3); } } void camSwap(int currentCam){ GameObject[] cameras = GameObject.FindGameObjectsWithTag("cam"); foreach (GameObject cams in cameras){ Camera theCam = cams.GetComponent<Camera>() as Camera; theCam.enabled = false; } string oneToUse = "Camera"+currentCam; Camera usedCam = GameObject.Find(oneToUse).GetComponent<Camera>() as Camera; usedCam.enabled = true; } }
http://promakers.ir/showthread.php?tid=8769
www.unity3dstudent.com/2010/12/switching-cameras-at-runtime/