Unity 4.x遊戲開發技巧集錦第2章攝像機的應用

大學霸發表於2014-10-20
Unity 4.x遊戲開發技巧集錦第2章攝像機的應用
作為遊戲開發者,千萬不要忽略了攝像機(Camera)的重要性。畢竟玩家是通過攝像機,才看到了遊戲的檢視。本章將介紹一些攝像機的常見應用。本文選自《Unity 4.x遊戲開發技巧集錦》
Unity 4.x遊戲開發技巧集錦2.1  設定雙遊戲檢視
很多遊戲裡,一個遊戲的檢視中,經常會包含另一個遊戲檢視。而兩個檢視所呈現的,是由兩個攝像機在場景的不同位置所拍攝的畫面。例如,《QQ飛車》中,除了第三人稱檢視以外,遊戲檢視的右側還有一個跑道位置預覽檢視,如圖2-1所示。本節將模擬這種情況,然後說明生成這種檢視效果的方法。本文選自《Unity 4.x遊戲開發技巧集錦》

圖2-1  《QQ飛車》中的雙遊戲檢視
Unity 4.x遊戲開發技巧集錦2.1.1  環境準備
首先,除了場景中預設生成的Main Camera物件外,還需要為場景新增4個遊戲物件:Directional light、Camera、Cube和Sphere。改變兩個攝像機的位置,使得它們看到場景中不同的遊戲物件,如圖2-2所示。
圖2-2  為場景新增遊戲物件,並調整它們的位置
Main Camera所拍攝到的檢視裡有球體,Camera所拍攝到的檢視裡有立方體,修改Camera拍攝檢視的背景顏色,具體操作是:選中Camera,在檢視器中修改名為Camera的元件的Background屬性為其它的顏色,如圖2-3所示。最終兩個遊戲檢視合併時,背景顏色可以區分兩個檢視的邊界。本文選自《Unity 4.x遊戲開發技巧集錦》

  
                                                                                                       圖2-3  修改攝像機所拍攝檢視的背景顏色
Unity 4.x遊戲開發技巧集錦2.1.2  編寫指令碼
然後,在Project檢視裡建立一個C#指令碼檔案,並命名為PictureInPicture。開啟指令碼檔案,並向其中新增如下程式碼:本文選自《Unity 4.x遊戲開發技巧集錦》
  • 01 using UnityEngine;
  • 02
  • 03 public class PictureInPicture : MonoBehaviour
  • 04 {
  • 05 //定義列舉型別
  • 06 public enum HorizontalAlignment{left, center, right};
  • 07 public enum VerticalAlignment{top, middle, bottom};
  • 08 public enum ScreenDimensions{pixels, screen_percentage};
  • 09 //定義列舉型別的變數
  • 10 public HorizontalAlignment horizontalAlignment = HorizontalAlignment.left;
  • 11 public VerticalAlignment verticalAlignment = VerticalAlignment.top;
  • 12 public ScreenDimensions dimensionsIn = ScreenDimensions.pixels;
  • 13
  • 14 public int width = 50;
  • 15 public int height= 50;
  • 16 public float xOffset = 0f;
  • 17 public float yOffset = 0f;
  • 18 public bool update = true;
  • 19
  • 20 private int hsize, vsize, hloc, vloc;
  • 21 //遊戲物件初始化時,呼叫此函式
  • 22 void Start ()
  • 23 {
  • 24 AdjustCamera ();
  • 25 }
  • 26 // 遊戲執行時,每一幀都呼叫此函式
  • 27 void Update ()
  • 28 {
  • 29 if(update)
  • 30 AdjustCamera ();
  • 31 }
  • 32 void AdjustCamera()
  • 33 {
  • 34 if(dimensionsIn == ScreenDimensions.screen_percentage) //調節檢視為指定百分比大小
  • 35 {   
  • 36 hsize = Mathf.RoundToInt(width * 0.01f * Screen.width);
  • 37 vsize = Mathf.RoundToInt(height * 0.01f * Screen.height);
  • 38 }
  • 39 else //調節檢視為指定畫素大小
  • 40 {
  • 41 hsize = width;
  • 42 vsize = height;
  • 43 }
  • 44 if(horizontalAlignment == HorizontalAlignment.left) //水平方向上是左對齊
  • 45 {
  • 46 hloc = Mathf.RoundToInt(xOffset * 0.01f * Screen.width);   
  • 47 } 
  • 48 else if(horizontalAlignment == HorizontalAlignment.right) //水平方向上是右對齊
  • 49 {
  • 50 hloc = Mathf.RoundToInt((Screen.width - hsize) - (xOffset * 0.01f * Screen.width));
  • 51 } 
  • 52 else  //水平方向上是居中對齊
  • 53 {
  • 54 hloc = Mathf.RoundToInt(((Screen.width * 0.5f) -
  • 55  (hsize * 0.5f)) - (xOffset * 0.01f * Screen.height));
  • 56 }
  • 57 if(verticalAlignment == VerticalAlignment.top) //垂直方向上是頂端對齊
  • 58 {
  • 59 vloc = Mathf.RoundToInt((Screen.height - vsize) - (yOffset * 0.01f * Screen.height));
  • 60 }
  • 61 else if(verticalAlignment == VerticalAlignment.bottom) //垂直方向上是底端對齊
  • 62 {
  • 63 vloc = Mathf.RoundToInt(yOffset * 0.01f * Screen.height);
  • 64 }
  • 65 else //垂直方向上是居中對齊
  • 66 {
  • 67 vloc = Mathf.RoundToInt(((Screen.height * 0.5f) - 
  • 68 (vsize * 0.5f)) - (yOffset * 0.01f * Screen.height));
  • 69 }
  • 70 camera.pixelRect = new Rect(hloc,vloc,hsize,vsize);
  • 71 }
  • 72 }
指令碼將依據使用者自定義的設定,決定該如何擺放,以及以多大的尺寸,顯示Camera所拍攝的檢視。本文選自《Unity 4.x遊戲開發技巧集錦》

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1304304/,如需轉載,請註明出處,否則將追究法律責任。

相關文章