Bài 6: Thành phần vật lý và xử lý va chạm

Thảo luận trong 'Unity' bắt đầu bởi Trần Văn Cường, 10/4/16.

  1. Trần Văn Cường

    Trần Văn Cường I love CNTT Thành viên BQT Thành viên BQT

    Tham gia ngày:
    8/11/15
    Bài viết:
    3,693
    Đã được thích:
    43
    Điểm thành tích:
    48
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên
    Nơi ở:
    Quảng Ninh thân yêu!
    Web:

    Xem lại: Bài 5: Prefab, Script và một số xử lý cơ bản

    Ở phần trước chúng ta đã tìm hiểu được các tạo Prefab và một số thao tác cơ bản với Prefab (xoá, thêm) trong quá trình game thực thi, và các thao tác cơ bản khác...

    Tiếp theo hôm nay mình sẽ hướng dẫn cách thêm phần xử lý vật lý và va chạm vào đối tượng game.

    Link dự án mẫu bài này:
    https://www.dropbox.com/sh/xu5rl7s3ssch2bk/e_Ny9i4LwW

    III. Tạo các đối tượng cơ bản
    1. Game Object
    2. Sprite
    3. Animation
    4. Prefab
    5. Script và điều khiển máy trạng thái
    6. Thành phần vật lý và xử lý va chạm
    a. Thêm thành phần vật lý (Physics 2D)


    Thành phần vật lý hỗ trợ các thao tác về vật lý như: tác dụng lực, trọng lực trái đất, ma sát...

    Để thêm thành phần vật lý ta làm như sau: ở Hierarchy, chọn đối tượng MainCharacter (đối tượng cần thêm) / Menu /Component / Physics 2D / Rigidbody 2D


    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham.png

    Ta sẽ thấy ở cửa sổ Inspector khi chọn đối tượng MainCharacter sẽ thêm một Component nữa là Rigidbody 2D như sau:


    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-1.png

    Một số giá trị cần lưu ý sau:

    Mass: là khối lượng của đối tượng
    Linear Drag: Hệ số ma sát của vật đối với chuyển động kéo.
    Angular Drag: Hệ số ma sát của vật đối với chuyển động quay
    Gravity scale: giống như hệ số G trong vật lý (~ 9.81), chỉ sự ảnh hưởng của lực hút trái đất. Ta có thể đặt = 0, tức là không ảnh hưởng bởi lực hút trái đất.
    Is Kinematic: loại bỏ tác dụng vật lý ra khỏi đối tượng, thường sử dụng với các đối tượng như tường, nền ...
    Fixed Angle: Đối tượng luôn nằm một góc cố định. Không thay đổi khi tương tác vật lý.
    rigidbody2D.AddForce(Vector2 f): phương thức tác dụng một lực vào đối tượng

    Hoặc các bạn có thể tham khảo chi tiết, các thuộc tính và phương thức ở đây

    Sau khi thêm thành phần vật lý vào, nhấn nút play để xem demo, ta sẽ thấy đối tượng sẽ từ từ rơi xuống (do Gravity scale > 0).

    Tương tự, ta sẽ thêm thành phần vật lý cho đối tượng Ground, và đặt thuộc tính cho nó làIs Kinematic để làm nền.

    Chú ý: Để có tác dụng cho tất cả các Prefab, sau khi thêm hoặc thay đổi bất cứ thuộc tính nào, ta nhấn Apply.


    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-2.png

    b. Thành phần xử lý va chạm

    Ở Hierarchy, chọn đối tượng MainCharacter (đối tượng cần thêm) / Menu /Component / Physics 2D / Circle Collider 2D

    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-3.png

    Đối tượng sẽ có thêm thuộc tính Collider:

    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-4.png

    Ta sẽ chọn tâm và bán kính để xác định vùng xử lý va chạm.

    Thuộc tính: Is Trigger: nếu chọn thì đối tượng chỉ dùng để xác định va chạm mà không ảnh hưởng bởi tác động vật lý.

    Kết quả ta sẽ thấy như sau:

    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-5.png

    Tiếp theo ta tiến hành thêm thành phần Collider cho đối tượng Ground, lần này ta sẽ chọn Box Collider 2D thay vì Circle Collier 2D. Các thuộc tính cũng tương tự, ta có thể chỉnh sửa hình chữ nhật để xác định vùng va chạm.

    Chú ý: ta chọn Circle Collider 2D cho đối tượng MainCharacter để tránh trường hợp nền (cái đối tượng Ground, có độ cao không đều) nhấp nhô dẫn đến các không di chuyển được nhân vật MC hay còn gọi là bị Stuck.

    Bây giờ ta nhấn nút play để test thì sẽ thấy đối tượng rơi xuống, gặp cái dãy đối tượng Ground thì đứng lại, và đối tượng bị nghiêng (Ta tưởng tượng có một chiếc bánh xe hình tròn rơi xuống mặt đất, nó sẽ lăn :D). Để tránh đối tượng nghiêng này chúng ta sẽ tick vào thuộc tính Fixed Angle của nhân vật MainCharacter.

    Ta sẽ tìm hiểu thêm 3 phương thức:

    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-6.png

    void FixedUpdate()
    {

    }

    --> Các tính toán, tương tác vật lý, chúng ta sẽ đặt trong hàm này, ví dụ như AddForce, etc
    (Chi tiết tại đây)

    void OnCollisionEnter2D(Collision2D other)
    {

    }

    --> Hàm này được gọi khi có hai đối tượng va chạm nhau.

    void OnTriggerEnter2D(Collider2D other)
    {

    }

    --> Hàm này được gọi khi có hai đối tượng va chạm nhau, trong đó có 1 hoặc cả hai đối tượng là Trigger.

    Các bạn có thể tham khảo thêm chi tiết nhiều hàm khác ở đây.

    Sau khi đã thêm phần tính toán va chạm và vật lý, ta sẽ cập nhập lại các điều khiển đối tượng bằng cách sử dụng tác dụng vật lý để làm đối tượng di chuyển, và nhảy.

    Khai báo thêm hai thuộc tính movingForce và jumpForce trong MainCharacterBehavior để lưu trữ giá trị lực khi nhảy và khi di chuyển:
    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-7.png

    Ở hàm Fixed Update:

    bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham-8.png

    Bây giờ các bạn có thể xử lý cho đối tượng nhảy lên khi nhấn nút up/down.

    Vậy là chúng ta đã biết cách thêm và sử dụng thành phần vật lý và xử lý va chạm, phần tiếp theo ta sẽ tìm hiểu tiếp cách hiển thị text, thông tin và cách chuyển màn chơi. Hay chuyển Scenes.

    Xem tiếp: Bài 7: Text, Particle System và chuyển đổi màn chơi
     

    Bình Luận Bằng Facebook

    data-href="https://cnttqn.com/threads/bai-6-thanh-phan-vat-ly-va-xu-ly-va-cham.1519.html"