Showing posts with label Unity cookbook. Show all posts
Showing posts with label Unity cookbook. Show all posts

7/03/2014

COOKBOOK - THAY ĐỔI BIỂU TƯỢNG CON TRỎ CHUỘT



Bài viết này mình sẽ hướng dẫn các bạn cách thay đổi hình dạng của con trỏ chuột trong game. Ngoài ra còn để biểu thị các chức năng khác nhau, như việc Phóng to - có thể thay thế con trỏ chuột thành hình kính lúp, Nhắm bắn - sử dụng con trỏ hình vòng tròn có tâm bắn...

4/30/2014

COOKBOOK - HIỂN THỊ BIỂU TƯỢNG CÁC MÓN ĐỒ ĐƯỢC NHẶT




Có rất nhiều loại đồ vật mà người chơi có thể nhặt và lưu trữ trong suốt quá trình chơi game như chìa khóa, bình máu, những món đồ tăng điểm.... Một lớp PickUp tổng quát để thực hiện chức năng nhặt những món đồ sẽ rất hữu dụng, và sử dụng GUI để hiển thị biểu tượng của các món đồ có thể được thực hiện thông qua code C# là List < T > để liệt kê các đối tượng.

4/10/2014

COOKBOOK - HIỂN THỊ TÊN ĐỒ VẬT ĐƯỢC NHẶT



Hầu hết các game đều có những món đồ vật buộc người chơi phải chạy đến để nhặt. Điển hình như việc nhặt một chiếc chìa khóa để mở một cánh cổng nào đó để đi tiếp chẳng hạn. Bài viết này sẽ hướng dẫn các bạn sử dụng collider để thực hiện điều đó.

3/26/2014

COOKBOOK - HIỂN THỊ ĐỒNG HỒ ĐẾM NGƯỢC BẰNG GUI LABEL




Trong nhiều game quy định thời gian làm nhiệm vụ hay kiếm thêm điểm thưởng bằng cách quy định một khoảng thời gian nhất định nào đó. Trong bài viết này, mình sẽ hướng dẫn các bạn tạo đồng hồ đếm ngược đơn giản bằng GUI.

3/11/2014

COOKBOOK - HIỂN THỊ RADAR


 

Radar hiển thị các đối tượng khác liên quan đến người chơi, thông thường radar sẽ là hình tròn và tâm của nó là nơi player đang đứng, và mỗi chấm tròn trên radar tượng trưng cho các đối tượng khác. Radar tinh vi sẽ hiển thị các chấm tròn khác nhau với từng loại đối tượng.

2/27/2014

COOKBOOK - HIỂN THỊ LA BÀN


  - Hiển thị la bàn -

Trong các địa hình hay bản đồ rộng lớn, việc hiển thị la bàn để định hướng cho người chơi là điều rất cần thiết. Bằng việc hiển thị hình ảnh minh họa hướng nhìn theo thời gian thực với GUI. Chúng ta có thể mô phỏng được hướng nhìn của người chơi trên bản đồ là hướng Nam hay Bắc, Đông hay Tây.

2/20/2014

COOKBOOK - TẠO ĐỒNG HỒ KIM



  - Tạo đồng hồ kim -

Việc tạo đồng hồ kim tốn nhiều thời gian để vẽ các kim chỉ thời gian nhưng đổi lại sử dụng đồng hồ kim sẽ nổi bật về mặt đồ họa hơn.

2/15/2014

COOKBOOK - TẠO ĐỒNG HỒ KĨ THUẬT SỐ BẰNG GUI


  - Tạo đồng hồ kĩ thuật số bằng GUI -

Dù rằng ở thế giới thực hay thế giới trong game, có rất nhiều game sử dụng nhiều dạng đồng hồ với nhiều kiểu hiện thị khác nhau. Hầu hết các loại đồng hồ hiển thị là một chuỗi (string) biểu diễn dạng số nguyên (integer) của giờ, phút, giây.

2/12/2014

COOKBOOK - TÔ SÁNG VẬT THỂ KHI NHẤP CHUỘT VỚI COLLIDER



  - Tô sáng vật thể khi nhấp chuột với collider -

Tô sáng (highlight) là một hiệu ứng rất hữu dụng để người chơi có thể biết rằng có thể tương tác với vật thể. Điều này rất hữu dụng trong các thể loại game như xếp hình và phiêu lưu theo kiểu nhấp chuột, và nó còn có thể được sử dụng vào việc tạo giao diện người dùng bằng 3D.

2/04/2014

COOKBOOK - THAY ĐỔI VẬT LIỆU CHO VẬT THỂ BẰNG GUI



  - Thay đổi vật liệu cho vật thể  bằng GUI -

Tùy biến ảnh giao đại diện thường dùng một hoặc nhiều ảnh/vật liệu mẫu đã có và gắn nó vào ảnh đại diện. Bài viết này, sẽ sử dụng GUI để kết hợp 2 vật liệu (texture) để tạo nên ảnh đại diện do người dùng lựa chọn.

2/02/2014

COOKBOOK - THAY ĐỔI MÀU SẮC CHO VẬT THỂ


  - Thay đổi màu sắc cho vật thể -

Trong các phần thiết lập giao diện hoặc các phần tùy chỉnh dành cho người dùng. Ví dụ điển hình là thay đổi màu sắc diện mạo của nhân vật. Trong bài viết này, sẽ hướng dẫn cách dùng các thanh trượt (slider) để điều chỉnh màu sắc vật liệu (material) được gán vào nhân vật dựa trên các giá trị của bảng màu RGB (Red Green Blue).

1/17/2014

COOKBOOK - TẠO VẬT LIỆU PHẢN CHIẾU



  - Tạo vật liệu phản chiếu -

Kim loại, sơn bóng, nhựa bóng là các vật liệu phản chiếu điển hình. Unity cũng cung cấp cho chúng ta môi trường để có thể tạo nên vật liệu phản chiếu như vậy.

12/30/2013

COOKBOOK - HIỂN THỊ BẢN ĐỒ THU NHỎ



  - Hiển thị bản đồ thu nhỏ -
Trong hầu hết các game, một góc nhìn rộng trong game rất có giá trị để định vị và bắt thông tin. Bản đồ thu nhỏ là một thứ tuyệt vời giành cho người chơi có thể mở rộng góc nhìn cả trong chế độ góc nhìn thứ nhất hoặc ba.


12/10/2013

Cookbook - HIỆU ỨNG TẠO HẠT


 - Hiệu ứng tạo hạt -

Với phiên bản Unity 3.5 trở đi, rất nhiều hiệu ứng hữu dụng được tạo ra bởi Particle System ( Hệ thống tạo hạt ). Nhiều hiệu ứng cần phải viết script đều được cung cấp trong hệ thống Shuriken particle.

12/01/2013

Cookbook - XOAY GÓC NHÌN CAMERA QUANH VẬT THỂ


 
  - Xoay góc nhìn quanh vật thể -

Như các bạn thường thấy ở những trang bán điện thoại online, các mặt hàng được trưng bày sẽ có một số hình 3 chiều để các bạn có thể nhìn thấy toàn diện chiếc điện thoại mà bạn ưng ý nhất. Bài viết này mình sẽ hướng dẫn các bạn tạo ra hiệu ứng xoay góc nhìn của camera một quanh vật thể như chức năng đã trình bày ở trên.

Chuẩn bị
Mobile.unitypackage

Cách để làm

B1. Nhấp phải vào vùng trống trong thẻ Project và chọn Import Package | Custom Package và Import file Mobile vừa tải ở link trên. Double click vào scene Xoay_Camera_Scene.






B2. Tại thẻ Project, nhấp chọn nút Creat | Java Script và đặt tên là InspectCamera.

B3. Double click vào file C# vừa tạo và chèn đoạn code sau vào:

var target : Transform;
var distance = 10.0;

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

private var x = 0.0;
private var y = 0.0;

@script AddComponentMenu("Camera-Control/Inspect Camera")
var zoomInLimit = 2.0;
var zoomOutLimit = 1.0;
private var initialFOV : float;

function Start () {
    initialFOV = camera.fieldOfView;
    transform.position = new Vector3(0.0f, 0.0f, -distance) + target.position;    
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;

    // Make the rigid body not change rotation
       if (rigidbody)
        rigidbody.freezeRotation = true;
}

function LateUpdate () {
   if (target && Input.GetMouseButton(0)) {
    if(Input.GetKey(KeyCode.RightShift) || Input.GetKey(KeyCode.LeftShift)){
       var zoom = camera.fieldOfView - Input.GetAxis ("Mouse Y");
      if(zoom >= initialFOV / zoomInLimit && zoom <= initialFOV / zoomOutLimit){
          camera.fieldOfView -= Input.GetAxis ("Mouse Y");
   }        
     } else {
      x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
             }
     y = ClampAngle(y, yMinLimit, yMaxLimit);
     var rotation = Quaternion.Euler(y, x, 0);
     var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
      transform.rotation = rotation;
      transform.position = position;
    }
}


static function ClampAngle (angle : float, min : float, max : float) {
    if (angle < -360)
        angle += 360;
    if (angle > 360)
        angle -= 360;
    return Mathf.Clamp (angle, min, max);
}

B4. Kéo thả file Java Script này vào Main Camera ở thẻ Project.

B5. Nhấp chọn Main Camera, qua thẻ Inspector, nhấp chuột vào nút tròn cuối dòng Target của InspectCamera (Script) và chọn mobile.



B6. Nhấp nút Play để kiểm tra thành quả. Bạn có thể giữ chuột và kéo ra các hướng để xoay góc nhìn. Nhấn Shift và kéo thả chuột để phóng to / thu nhỏ góc nhìn.

11/28/2013

Cookbook - PHÓNG TO GÓC NHÌN CỦA CAMERA



  - Phóng to góc nhìn của camera -

Bài viết này mình sẽ hướng dẫn các bạn tạo chức năng phóng to góc nhìn của camera bằng một cú click chuột. Chức năng này rất hữu dụng cho các sniper (xạ thủ) trong các game bắn súng sử dụng súng nhắm từ xa.

Chuẩn bị
Terrain

Cách để làm

B1. Nhấp phải vào thẻ Project và chọn Import Package | Custom Package rồi Open file Terrain vừa tải. Double click vào scene Demo mình đã tạo sẵn các đối tượng phụ để tiện sử dụng.


B2. Tiếp tục nhấp phải vào thẻ Project và chọn Creat | C# Script và đặt tên là TelescopicView.


B3. Double click vào file C# vừa tạo và chèn đoạn code sau vào:

using UnityEngine;
using System.Collections;
public class TelescopicView : MonoBehaviour{
    public float ZoomLevel = 2.0f;
    public float ZoomInSpeed = 100.0f;
    public float ZoomOutSpeed = 100.0f;
    private float initFOV;
    //private Vignetting vignette;
    //public float vignetteAmount = 10.0f;
    void Start(){
        initFOV = Camera.main.fieldOfView;   //vignette = this.GetComponent("Vignetting") as Vignetting;
    }
    void Update(){
        if (Input.GetKey(KeyCode.Mouse0)){
            ZoomView();
        }else{
            ZoomOut();
        }
    }
    void ZoomView(){
        if (Mathf.Abs(Camera.main.fieldOfView - (initFOV / ZoomLevel)) < 0.5f){
            Camera.main.fieldOfView = initFOV / ZoomLevel;
            // vignette. intensity = vignetteAmount;
        }else if (Camera.main.fieldOfView - (Time.deltaTime * ZoomInSpeed) >= (initFOV / ZoomLevel)){
            Camera.main.fieldOfView -= (Time.deltaTime * ZoomInSpeed);
            // vignette. intensity = vignetteAmount * (Camera.main.fieldOfView - initFOV)/((initFOV / ZoomLevel) - initFOV);
        }
    }
    void ZoomOut(){
        if (Mathf.Abs(Camera.main.fieldOfView - initFOV) < 0.5f){
            Camera.main.fieldOfView = initFOV;
            // vignette. intensity = 0;
        }else if (Camera.main.fieldOfView + (Time.deltaTime * ZoomOutSpeed) <= initFOV){
            Camera.main.fieldOfView += (Time.deltaTime * ZoomOutSpeed);
            //vignette.intensity = vignetteAmount * (Camera.main.fieldOfView - initFOV)/((initFOV / ZoomLevel) - initFOV);
        }
    }
}



B4. Kéo thả file C# Script vừa tạo vào Main Camera ở thẻ Hierarchy.


B5. Nhấn nút Play để kiểm tra thành quả. Bạn có thể nhấp và giữ chuột trái để phóng to góc nhìn.


B6 (Pro only). Nếu bạn đang sử dụng Unity3D phiên bản pro bạn có thể dừng game bằng cách ấn tiếp vào nút play để hủy bỏ chế độ đang chơi và tiếp tục thực hiện các bước tiếp theo.

B7 (Pro only). Nhấp phải vào thẻ Project và chọn Import Package | Image Effects (Pro only).


B8 (Pro only). Nhấp chuột chọn Main Camera và vào Component | Image Effects | Camera | Vignette.


B9 (Pro only). Mở lại file C# Telescopic View và nhấp chuột vào các dòng comment (những dòng có // ở đầu) và ấn tổ hợp phím Ctrl + Alt + C để xóa dấu comment nên chương trình mới có thể thực hiện các lệnh này được.

 

B10 (Pro only). Nhấp nút Play để kiểm tra thành quả. Lúc này, bạn sẽ có thêm hiệu ứng độ tối ở góc ảnh khi phóng to góc nhìn.

11/18/2013

Cookbook - Tạo texture từ ảnh chụp màn hình



  - Tạo texture từ ảnh chụp màn hình -
Nếu bạn muốn game hay người chơi của bạn chụp nhanh ảnh trong game và sử dụng nó như là một texture, bài này sẽ chỉ bạn cách làm thế nào. Bài này có thể rất hữu ích nếu bạn dự định  thực hiện trưng bày những bức ảnh trong game hay hiển thị một bức ảnh trong thời khắc then chốt vào phút cuối (đại loại trong game đua xe, tốc độ...).


Cách để làm

B1.  Nhấp phải vào thẻ Project và chọn Import Package | Skyboxes rồi nhấn Import để sử dụng gói giả lập bầu trời.


B2. Nhấp chuột chọn Main Camera trong thẻ Hierarchy và qua thẻ Inspector, kéo thanh trượt xuống dưới cùng và chọn Add component. Gõ vào khung search vừa hiện lên từ Skybox và click chuột chọn component vừa search để thêm chức năng này cho Main Camera.


B3. Vẫn trong thẻ Inspector, tại component Skybox vừa thêm, click chọn hình tròn phía sau Custom Skybox và chọn Eerie Skybox trong hộp thoại Select Material vừa hiện lên.


B4. Nhấp phải vào thẻ Project và chọn Import Package | Character Controller.

B5. Nhấp chọn Main Camera, sau đó vào Component | Camera Control | Mouse Look.


B6.  Tại thẻ Project, bấm nút Creat | C# Script và đổi tên thành ScreenTexture.

 

B7.  Double click vào file C# vừa tạo và chèn đoạn code sau vào:

using UnityEngine;
using System.Collections;

public class ScreenTexture : MonoBehaviour
{
    public int photoWidth = 50;
    public int photoHeight = 50;
    public int thumbProportion = 25;
    public Color borderColor = Color.white;
    public int borderWidth = 2;
    private Texture2D texture;
    private Texture2D border;
    private int screenWidth;
    private int screenHeight;
    private int frameWidth;
    private int frameHeight;
    private bool  shoot = false;

    void  Start ()
    {
        screenWidth = Screen.width;
        screenHeight = Screen.height;
        frameWidth = Mathf.RoundToInt (screenWidth * photoWidth * 0.01f);
        frameHeight = Mathf.RoundToInt (screenHeight * photoHeight * 0.01f);
        texture = new Texture2D (frameWidth, frameHeight, TextureFormat.RGB24, false);
        border = new Texture2D (1, 1, TextureFormat.ARGB32, false);
        border.SetPixel (0, 0, borderColor);
        border.Apply ();
    }

    void  Update ()
    {
        if (Input.GetKeyUp (KeyCode.Mouse0))
            StartCoroutine (CaptureScreen ());
    }

    void  OnGUI ()
    {
        GUI.DrawTexture (new Rect ((screenWidth * 0.5f) - (frameWidth * 0.5f) - borderWidth * 2, ((screenHeight * 0.5f) - (frameHeight * 0.5f)) - borderWidth, frameWidth + borderWidth * 2, borderWidth), border, ScaleMode.StretchToFill);
        GUI.DrawTexture (new Rect ((screenWidth * 0.5f) - (frameWidth * 0.5f) - borderWidth * 2, (screenHeight * 0.5f) + (frameHeight * 0.5f), frameWidth + borderWidth * 2, borderWidth), border, ScaleMode.StretchToFill);
        GUI.DrawTexture (new Rect ((screenWidth * 0.5f) - (frameWidth * 0.5f) - borderWidth * 2, (screenHeight * 0.5f) - (frameHeight * 0.5f), borderWidth, frameHeight), border, ScaleMode.StretchToFill);
        GUI.DrawTexture (new Rect ((screenWidth * 0.5f) + (frameWidth * 0.5f), (screenHeight * 0.5f) - (frameHeight * 0.5f), borderWidth, frameHeight), border, ScaleMode.StretchToFill);
        if (shoot) {
            GUI.DrawTexture (new Rect (10, 10, frameWidth * thumbProportion * 0.01f, frameHeight * thumbProportion * 0.01f), texture, ScaleMode.StretchToFill);
        }
    }

    IEnumerator  CaptureScreen ()
    {
        yield return new WaitForEndOfFrame();
        texture.ReadPixels (new Rect ((screenWidth * 0.5f) - (frameWidth * 0.5f), (screenHeight * 0.5f) - (frameHeight * 0.5f), frameWidth, frameHeight), 0, 0);
        texture.Apply ();
        shoot = true;
    }
}

B8.  Lưu đoạn script bạn vừa nhập lại và kéo thả nó vào Main Camera ở thẻ Hierarchy.

B9.  Tại thẻ Inspector, trong component Screen Capture, đổi giá trị
         Photo Width và Photo Height = 25 và Thumb Proportion = 75, như hình dưới đây:


B10.  Nhấp nút Play để kiểm tra thành quả. Bạn có thể chụp bất kì ảnh gì chỉ bằng cú click chuột.



Cách hoạt động

Với 1 cú click chuột, hàm lưu các điểm ảnh sẽ khởi động theo một hình chữ nhật và gán nó vào texture được vẽ nên bằng GUI.

Còn nữa

Bạn còn có thể sử dụng nó để:

1. Gán chất liệu cho vật thể:
Bạn có thể gán texture của bạn vào bất kì chất liệu nào cho các đối tượng khác bằng cách thêm dòng code tương tự vào cuối function (hàm) CaptureScreen:
GameObject.Find("MyObject").renderer.material.mainTexture = texture;


2. Sử dụng như một ảnh chụp màn hình:
Bạn có thể xuất nó thành định dạng PNG và lưu trữ nó. Tham khảo tài liệu dưới đây:
http://docs.unity3d.com/Documentation/ScriptReference/Texture2D.EncodeToPNG.html.

11/05/2013

Cookbook - Tùy biến hiệu ứng lens flare



  - Tùy biến hiệu ứng lens flare -

Với bất kì ai đã từng chơi các game có các cảnh quay ngoài trời đều có thể nói với bạn biết rằng hiệu ứng lens flare dùng để mô phỏng lại một chùm sáng trong góc nhìn của người chơi. Ngoài ra, nó còn được sử dụng rất nhiều trong các thể loại game khác nhau. Bài viết này sẽ hướng dẫn các bạn tùy chỉnh hiệu ứng sẵn có này trong Unity.

Chuẩn bị
my50mmflare.psd

Cách để làm
B1. Nhấp chuột phải vào thẻ Project và chọn Import Package | Character Controller. Tiếp tục vào Import Package | Light Flares.

B2. Tại thẻ Hierarchy, click chọn Creat | Directional Light.

B3. Click chọn Main Camera trong thẻ Hierarchy và vào Component | Camera-Control | Mouse Look
B4. Tại thẻ Project, truy cập vào Standard Assets | Light Flares | Sources, nhấp chuột chọn Sun và ấn Ctrl + D để nhân đôi đối tượng này lên rồi đặt tên thành mySun.


B5. Nhấp chuột chọn mySun, tại thẻ Inspector click chuột vào texture có tên 50mmflare để hiển thị thư mục chứa file texture này.

B6. Nhân đôi đối tượng này lên bằng cách ấn Ctrl + D, đổi tên thành My50mmflare và double click vào nó rồi dùng Photoshop để tùy biến hiệu ứng. Hoặc nếu không có Photoshop, bạn có thể load file đã down ở trên vào và sử dụng.

B7. Tại thẻ Inspector, click chọn mySun và kéo thả file My50mmflare vào Flare Texture để điều chỉnh Flare Texture thành My50mmflare.

B8. Tại thẻ Hierarchy, click chọn Directional light và qua thẻ Inspector điều chỉnh Flare thành mySun.

B9. Nhấn nút Play để kiểm tra thành quả.

10/24/2013

Cookbook - Chuyển đổi qua lại giữa các camera




  - Chuyển đổi qua lại giữa các camera -

Việc lựa chọn thay đổi góc nhìn trong game thường thấy ở nhiều thể loại game như: thể thao, đua xe, mô phỏng và nhiều thể loại khác. Trong bài viết này chúng ta sẽ học cách để cung cấp cho người chơi tính năng chọn lựa các góc nhìn bằng bàn phím số.

10/22/2013

Cookbook - HƯỚNG DẪN TẠO HIỆU ỨNG TRANH TRONG TRANH



  - Hiệu ứng Tranh-Trong-Tranh -
Bài viết này sẽ chỉ cho các bạn cách để tạo thêm một góc nhìn nữa trong game. VD như bạn muốn chiếu một góc nhìn ở một quan cảnh khác so với góc nhìn hiện tại (thường thấy trong các kính chiếu hậu của game đua xe hơi) hay bạn muốn chia màn hình chính ra thành nhiều màn hình nhỏ, mỗi màn hình sử dụng một camera khác nhau trong các game nhiều người chơi. Bài viết này sẽ giúp các bạn giải quyết những vấn đề trên.

Chuẩn bị
basicLevel

Cách để làm

B1. Tạo một project mới bằng cách ấn Ctrl + N và điều chỉnh đường dẫn phù hợp. Nhấp chuột phải vào vùng trống trong thẻ Project và chọn Import Package | Custom Package và mở file basicLevel đã tải ở phần trên.


B2. Trong thẻ Project, vào thư mục 02_01_02 và double click vào file basicScene.


B3. Tại thẻ Hierarchy, chọn Creat | Camera để tạo thêm một camera mới trong game.


B4. Nhấp chọn Camera vừa tạo, tại thẻ Inspector điều chỉnh tọa độ và nhập giá trị Depth = 1 như hình sau:


B5. Nhấp chuột phải vào  vùng trống trong thẻ Project và chọn Creat | C# Script và đặt tên là PictureInPicture.

B6. Double click vào file C# vừa tạo và nhập đoạn code sau vào:

using UnityEngine;

public class PictureInPicture: MonoBehaviour
{
    public enum HorizontalAlignment
    {
        left,
        center,
        right
    };

    public enum VerticalAlignment
    {
        top,
        middle,
        bottom
    };
    public HorizontalAlignment horizontalAlignment = HorizontalAlignment.left;
    public VerticalAlignment verticalAlignment = VerticalAlignment.top;
    public enum ScreenDimensions
    {
        pixels,
        screen_percentage
    };
    public ScreenDimensions dimensionsIn = ScreenDimensions.pixels;
    public int width = 50;
    public int height = 50;
    public float xOffset = 0f;
    public float yOffset = 0f;
    public bool  update = true;
    private int hsize, vsize, hloc, vloc;
   
    void Start ()
    {
        AdjustCamera ();
    }

    void Update ()
    {
        if (update)
            AdjustCamera ();
    }

    void AdjustCamera ()
    {
        if (dimensionsIn == ScreenDimensions.screen_percentage) {
            hsize = Mathf.RoundToInt (width * 0.01f * Screen.width);
            vsize = Mathf.RoundToInt (height * 0.01f * Screen.height);
        } else {
            hsize = width;
            vsize = height;
        }
 
        if (horizontalAlignment == HorizontalAlignment.left) {
            hloc = Mathf.RoundToInt (xOffset * 0.01f * Screen.width);
        } else if (horizontalAlignment == HorizontalAlignment.right) {
            hloc = Mathf.RoundToInt ((Screen.width - hsize) - (xOffset * 0.01f * Screen.width));
        } else {
            hloc = Mathf.RoundToInt (((Screen.width * 0.5f) - (hsize * 0.5f)) - (xOffset * 0.01f * Screen.height));
        }
 
        if (verticalAlignment == VerticalAlignment.top) {
            vloc = Mathf.RoundToInt ((Screen.height - vsize) - (yOffset * 0.01f * Screen.height));
        } else if (verticalAlignment == VerticalAlignment.bottom) {
            vloc = Mathf.RoundToInt (yOffset * 0.01f * Screen.height);
        } else {
            vloc = Mathf.RoundToInt (((Screen.height * 0.5f) - (vsize * 0.5f)) - (yOffset * 0.01f * Screen.height));
        }    
        camera.pixelRect = new Rect (hloc, vloc, hsize, vsize);
    }
}

B7. Save file C# vừa tạo bằng cách ấn Ctrl + S và gắn nó vào Camera bạn mới tạo khi nãy bằng cách kéo thả file C# trong thẻ Project vào Camera trong thẻ Hierarchy.


B8. Nhấp chọn Camera trong thẻ Hierarchy, bỏ chọn dấu check ở mục Audio Listener trong thẻ Inspector và thiết lập các điều chỉnh như hình sau:


B9. Ấn nút Play và xem thành quả.