Just 4 fun!

Of course I can change the world, If you give me a source code

Post Ads (Documentation)

Author Info (Documentation)

style="display:block"
data-ad-client="ca-pub-2623284640924516"
data-ad-slot="8347113188"
data-ad-format="auto">

Wednesday, June 8, 2016

Căn chỉnh sprite nền vừa khít màn hình

Script canh chỉnh sprite nền vừa khít màn hình

·
Mặc dù từ bản Unity 5.0 trở đi, chúng ta đã có UI hỗ trợ việc căn chỉnh hình ảnh, button, text phù hợp với mọi kích cỡ màn hình, tuy nhiên có trường hợp như bạn có 1 sprite nền (background) và muốn nó vừa khít với tất cả tỉ lệ màn hình (4:3, 16:9, …), lúc này bạn cần viết một script nhỏ để làm việc này.
Để demo, bạn tạo 1 scene, thêm vào 1 sprite là tấm hình background




lúc này bạn chưa cần quan tâm tới vị trí hay kích thước tấm hình

Sau đó bạn viết  script như sau (tôi có comment đầy đủ chi tiết từng câu lệnh):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
using System.Collections;
//phải using UnityEditor để có thể dùng TextureImporter
using UnityEditor;

public class resizeSpriteFullScreen : MonoBehaviour {
                //tham chiếu tới camera
                public Camera cam;
                // Use this for initialization
                void Start () {
                                //lấy component Sprite Renderer
                                SpriteRenderer sr = GetComponent<SpriteRenderer>();
                                //lấy hình cần đặt fullscreen
                                TextureImporter ti = AssetImporter.GetAtPath("Assets/image1.png") as TextureImporter;
                                //lấy giá trị Pixels To Units của tấm hình sprite đó
                                float PixelsToUnits = ti.spritePixelsToUnits;
                                //Khai báo vector3 mới
                                Vector3 sc = new Vector3(1f, 1f, 1f);
                                //tính toán chiều cao và chiều rộng của sprite cho khít với màn hình
                                sc.y = cam.orthographicSize*2f*PixelsToUnits/sr.sprite.rect.height;
                                sc.x = (cam.orthographicSize*(float)Screen.width/(float)Screen.height)*2f*PixelsToUnits/sr.sprite.rect.width;
                                //gán giá trị tính được vào local Scale của sprite
                                transform.localScale = sc;
                                //cho sprite vào vị trí chính giữa màn hình
                                transform.position = cam.transform.position;
                }
}
Bạn đưa script đó bỏ vào object background và kéo object Main camera vào biến tương ứng trong script
Bạn nhớ để ý scale lúc này là 1:1:1


Bây giờ bạn Play game, sẽ thấy ngay kết quả, sprite đã vừa khít màn hình, cho dù bạn thay đổi màn hình tỉ lệ hay kích thước nào chăng nữa. Ở những bài viết sau mình sẽ nói chi tiết hơn Sprite Renderer để các bạn hiểu rõ và có thể tự mình tìm ra cách scale Sprite theo tỉ lệ màn hình phù hợp nhất.


Like, share nếu bạn thấy bài viết của mình có ích! :)

No comments:

Post a Comment