VTC Academy Trung tâm đào tạo Công nghệ - Nội dung số

VTC Academy Trung tâm đào tạo Công nghệ - Nội dung số

TRANG CHỦ TIN TỨC SỰ KIỆN THƯ VIỆN HỖ TRỢ LIÊN HỆ
TIN TỨC
Làm thế nào để sử dụng con quay hồi chuyển trong Unity 3D.
Ngày đăng: 11/10/2015

Con quay hồi chuyển (Gyroscope) là một trong những vật liệu thú vị góp phần tạo nên những tính năng độc đáo cho chiếc điện thoại của bạn. Với các vị trí khác nhau của chiếc điện thoại, con quay hồi chuyển có thể định hướng chuyển động, giúp nhận biết hướng di chuyển hay những hành động ảnh hưởng lên chiếc smartphone. Điều này ảnh hưởng rất lớn đến trải nghiệm của người dùng ứng dụng game của bạn.

 

VTC Academy

 

Dù hữu ích, con quay hồi chuyển cũng khiến các nhà lập trình ứng dụng luôn khá đau đầu để kích hoạt được tính năng và áp dụng chúng thông qua những dòng code vào trong app.

Bài dưới đây có thể sẽ giúp bạn kiếm tiết được một it thời gian và công sức để lần đầu làm việc với con quay hồi chuyển.

Trong bài này, tôi sẽ hướng dẫn bạn cách để làm việc cụ thể trên công cụ Unity 3D. Các tính năng được tập trung vào đó là:

  • Màn hình thiết bị được cho là cánh cửa sổ đưa bạn nhìn vào thế giới ảo, khi mà bạn xoay điện thoại, màn hình ứng dụng cũng phải xoay trở lại cho phù hợp với góc nhìn của bạn.
  • Ứng dụng có thể làm việc trên mọi thiết vị với các kích thước khung hình khác nhau.
  • Bạn có thể thay đổi địa điểm, góc độ xem chỉ bằng những dòng code.
  • Luôn giữ cho hình ảnh bên trong ứng dụng song song với góc nhìn thực bên ngoài và luôn xác định trục xoay ngang phù hợp.

Vấn đề đầu tiên cần giải quyết đó là sự khác biệt giữa hệ thống tham chiếu trục tọa độ trên các thiết bị khác nhau. Đặc biệt là giữa người sử dụng iOS và các nền tảng khác. Hãy sử dụng lòng lệnh sau:

private static Quaternion ConvertRotation(Quaternion q)

{

    return new Quaternion(q.x, q.y, -q.z, -q.w);

}

Tiếp tục sử dụng dòng lệnh để tính toán vòng xoay của camera

transform.rotation = ConvertRotation(Input.gyro.attitude);

 

Tiếp theo bạn hãy quan tâm đến sự định hướng trên ứng dụng (lưu ý từ Unity 4 trở lên):

private Quaternion GetRotFix()
{
    if (Screen.orientation == ScreenOrientation.Portrait)
        return Quaternion.identity;
    if (Screen.orientation == ScreenOrientation.LandscapeLeft
    || Screen.orientation == ScreenOrientation.Landscape)
        return Quaternion.Euler(0, 0, -90);
    if (Screen.orientation == ScreenOrientation.LandscapeRight)
        return Quaternion.Euler(0, 0, 90);
    if (Screen.orientation == ScreenOrientation.PortraitUpsideDown)
        return Quaternion.Euler(0, 0, 180);
    return Quaternion.identity;
}\

Cập nhật thêm chức năng tính toán vòng quay camera:

transform.rotation = ConvertRotation(Input.gyro.attitude) * GetRotFix();

Bộ điều khiển sẽ cập nhật số vòng xoay của camera dựa trên số vòng xoay của thiết bị và thiết lập lại xoay màn hình trên mặt phẳng ngang sau khi kết thúc. Thêm một tính năng nữa đó là khả năng tính toán dựa trên số vòng xoay cơ bản của màn hình trên thiết bị.

transform.rotation = cameraBase * ( ConvertRotation(referenceRotation * Input.gyro.attitude) * GetRotFix();

Tính toán số cameraBase và referenceRotaion cần phải kĩ lưỡng. Quan trọng nhất là phải kĩ lưỡng trong số vòng quay thiết bị khi tính toán referenceRotaion và chỉ tính số vòng cho cameraBase khi hoàn tất 1 vòng quay quanh trục.

Cụ thể hơn mình sẽ gửi cho bạn trong ví dụ kèm theo

VTC Academy

Điều cuối cùng đó là phải làm mượt trong lúc xoay màn hình.

transform.rotation = Quaternion.Slerp(transform.rotation, cameraBase * 

( ConvertRotation(referanceRotation * Input.gyro.attitude) * GetRotFix()), lowPassFilterFactor);

Thêm hai chức năng AttachGyro và DetachGyro. Chức năng đầu tiên cho phép bộ điều khiển tính toán lại tất cả các vòng quay. Chức năng còn lại sẽ vô hiệu hóa việc điều khiển xoay đó.

Cuối cùng, bộ điều khiển con quay hồi chuyển đã sẵn sàng để hoạt động.

Hi họng bài viết này sẽ hữu ích cho bạn!!

Tải mẫu ở đây

 

Nếu bạn đang quan tâm đên Unity 3D và những tính năng của nó thì hãy mau chóng đăng kí tham gia hội thảo: Unity 3D mới nhất của chúng tôi

Chủ đề: Unity 3D: Engine Game đa nền tảng tốt nhất hiện nay.

Link đăng kí: http://vtcacademy.edu.vn/su-kien/hoithaounity

Thời gian: 9h - 11h30 ngày 17/10/2015 tại 132 Cộng Hòa, phường 13, quận Tân Bình, HCM.

 

 

Tìm hiểu thêm về thiết kế 3D >>>

 

 

Bạn cần tư vấn tại