روش یک:
دو متغیر از نوع 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
برای تغییر دوربین در بازی میخوام الگوریتم یا راهکاری رو برای حل این مسئله یاد بدم با توجه به تحقیقاتم.
اصل کار اینطوری هست :
function Update(){ if(Input.GetKey("1")){ Debug.Log("Using Camera One"); camSwap(1); } } function camSwap(currentCam : int){ }
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;
اینک اسکریپت کامل به دو زبان :
//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 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/