STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    C# Script - Lớp Quaternion

    Hướng dẫn thao tác với lớp Quaternion để quay đối tượng trong Unity.

    Rye Nguyen

    08/08/2015
    25/09/2020
    3 phút đọc
    C# Script - Lớp Quaternion

    Thuật ngữ Quaternion khởi nguồn từ lý thuyết toán học, được ứng dụng trong các phép quay không gian, trong Unity, Quaternion được sử dụng để biểu diễn phép quay của mọi đối tượng. 

    Tổng quan

    Quaternion được xây dựng dựa trên số phức toán học và được biểu diễn bởi 4 thành phần x, y, z, w với công thức:

    Q = w + xi + yj + zk

    Với i, j, k là các thành phần ảo, được xem như 3 vector đơn vị của các trục tọa độ tương ứng.

    Trong Unity, mọi phép quay của đối tượng đều được lưu trữ và thể hiện bằng Quaternion với 4 thành phần kể trên, các thành phần này không nên được chỉnh sửa độc lập đối với lập trình viên thông thường.

    Để truy xuất các thành phần đó, có thể sử dụng qua các kênh x, y, z, w tương ứng hoặc sử dụng như 1 mảng 4 phần tử với thứ tự như trên, ví dụ như sau:

    void Example()
    {
    	public Quaternion p;
    	p[3] = 0.5f;
    	p.x = 0.75f;
    }

    Ngoài ra còn những cách khác để thiết lập giá trị cho các kênh thông tin của Quaternion như sử dụng constructor hay phương thức Set. Các cách này chỉ có thể chỉnh sửa cùng lúc cả 4 kênh của Quaternion.

    eulerAngles

    Thuộc tính này trả về 1 Vector3, tương ứng với góc quay của từng trục trên đối tượng, đây là cách thức biểu diễn thông thường và dễ hiểu hơn của phép quay.

    Các hàm quan trọng và chức năng

    identity

    Thuộc tính này trả về 1 Quaternion tương ứng không có bất kỳ phép quay nào, tương ứng với Vector3(0, 0, 0) đối với cách biểu diễn dưới dạng eulerAngles.

    Đối tượng được gán identity sẽ có các trục toạ độ trùng với hệ trục toạ độ thế giới (World axes) hoặc đối tượng chứa nó (Parent axes).

    LookRotation

    Hàm LookRotation tạo ra 1 phép quay với hướng xác định, giá trị trả về là 1 Quaternion, guyên mẫu hàm như sau:

    public static Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up);

    Trong đó:

    • forward là 1 Vector3 được sử dụng để xác định hướng quay của đối tượng, trục z của đối tượng sẽ trùng với hướng quay.
    • Tham số upwards nhận giá trị mặc định là Vector3.up, nghĩa là trục y của đối tượng sẽ hướng lên trên so với forward, với nhu cầu sử dụng thông thường nên giữ nguyên giá trị mặc định của upwards để có được hiệu ứng đẹp nhất.

    Angle

    Trả về 1 góc (tính bằng độ - degree) là góc giữa 2 Quaternion.

    Nguyên mẫu của hàm:

    public static float Angle(Quaternion a, Quaternion b);

    Euler

    Thao tác với Quaternion qua 4 kênh x, y, z, w khá mơ hồ và khó hiểu. Do đó, Unity cung cấp 1 hàm giúp thao tác và điều chỉnh góc quay của đối tượng thông qua chính ba trục toạ độ của đối tượng đó, cú pháp của hàm như sau:

    public static Quaternion Euler(float x, float y, float z);

    Trong đó, x, y, z là ba góc quay tương ứng với ba trục toạ độ của đối tượng, các góc quay sử dụng đơn vị là độ.

    Lerp - Slerp

    LerpSlerp là 2 hàm nội suy phép quay giữa 2 Quaternion và hiển thị việc quay ra màn hình theo thời gian, cách sử dụng và chức năng cả 2 hàm là tương đối giống nhau:

    public static Quaternion Slerp(Quaternion from, Quaternion to, float t);
    public static Quaternion Lerp(Quaternion from, Quaternion to, float t);

    Với các phép quay lớn, góc quay rộng, hàm Lerp sẽ cho chất lượng hiển thị kém hơn Slerp, nhưng bù lại, về mặt tốc độ thì Lerp nhanh hơn do không thực hiện nội suy một cách phức tạp.

    Theo dõi cách sử dụng 2 hàm này trong code demo đính kèm.

    Code demo

    Bật cờ hiển thị Gizmos trong cửa sổ Game để theo dõi trực quan.

    STDIO_UnityQuaternion.zip

    0 Bình luận
    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Đề xuất

    GameObject - Thao Tác với C# Script
    Giới thiệu các thành phần chung của 1 GameObject và các thao tác với C# ...
    C# Script - Lớp Time
    Giới thiệu về lớp Time trong Unity, 1 số thuộc tính và chức năng, ứng ...

    Khám phá

    C# Script - Lớp Random
    Giới thiệu và hướng dẫn thao tác với lớp Random trong Unity để tạo ra ...
    9 Tính Năng Quan Trọng Trong C++11
    C++11 là một phiên bản cải tiến và nâng cấp từ C++98 (hay các bạn vẫn ...
    13/08/2015
    Interface Trong C#
    Giới thiệu về interface trong C#, ý nghĩa sử dụng, tính ứng dụng và cách ...
    Hello World với Objective-C
    Giới thiệu ngôn ngữ Objective-C và cách hiện thực chương trình bằng ...
    09/12/2015
    Hiệu Ứng Camera Shake trong Unity
    Hướng dẫn xây dựng hiệu ứng Camera Shake trong Unity
    STL - Map Trong C++
    Sử dụng STL Map trong C++, tìm hiểu, các phương thức thường được dùng ...
    C++11 - OOP - override
    Tìm hiểu về ý nghĩa và cách sử dụng từ khoá override trong C++11.
    17/06/2014
    std::string và Xử Lý Chuỗi trong C++
    Giới thiệu và hướng dẫn sử dụng thư viện std::string trong C++ xử lý ...
    15/08/2015
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020