Unity

Các va chạm trong Unity được tách ra khỏi chính Sprite thực tế, được gắn vào như các thành phần riêng biệt và được tính toán riêng. Bây giờ chúng ta hãy tìm hiểu nguyên nhân đằng sau điều này.

Mọi thứ trong trò chơi của bạn đều là GameObject. Ngay cả các ô riêng lẻ tạo nên cấp độ của bạn cũng là GameObjects của chính chúng.

Khi chúng tôi coi mọi thành phần là một GameObject, chúng tôi nhận ra rằng có thể có hàng nghìn GameObject trong một cảnh, tương tác với nhau theo một cách nào đó. Bạn có thể tưởng tượng rằng nếu Unity thêm các va chạm vào từng GameObject, thì công cụ này sẽ không thực tế khi tính toán các va chạm cho mỗi một trong số chúng. Chúng tôi sẽ tiếp tục và thêm một “bức tường” đơn giản mà nhân vật người chơi của chúng tôi có thể va vào. Để làm như vậy, hãy tạo một sprite khác và mở rộng quy mô nó bằng công cụ Rect. Chúng tôi cũng sẽ cung cấp cho nó màu đỏ thông qua thuộc tính Color trong thành phần Sprite Renderer.

Unity - Tương tác

Bây giờ, đi tới Thêm thành phần trong Thanh tra và nhập vào “Box Collider 2D”. Bấm vào thành phần đầu tiên hiển thị và một thành phần mới sẽ xuất hiện.

Unity - Tương tác

Bạn sẽ thấy một đường màu xanh lục sáng trên chu vi của GameObject của bạn. Đây là ranh giới va chạm . Nó là thứ xác định hình dạng thực tế của các vật thể va chạm.

Lặp lại tương tự với GameObject có thể di chuyển của chúng tôi.

Tất nhiên, va chạm trong Unity không chỉ giới hạn ở các hộp. Chúng có thể có nhiều hình dạng và kích thước khác nhau và không nhất thiết phải là bản sao của các thông số của đối tượng.

Unity - Tương tác

Chúng cũng có thể có hình dạng đa giác.

Unity - Tương tác

Không có gì lạ khi thấy các nhà phát triển và nhà thiết kế sử dụng các hình dạng gần đúng trong ranh giới va chạm của họ để đơn giản hóa các máy va chạm của họ và tránh các tính toán không cần thiết cho động cơ. Chúng ta sẽ học cách tạo ra các hình dạng và kích thước khác nhau bằng máy va chạm của chúng ta ngay sau đây.

Bây giờ chúng ta đã có ranh giới va chạm, hãy chơi và xem nó hoạt động.

Unity - Tương tác

Bạn sẽ nhận thấy rằng đối tượng di chuyển của chúng ta không hoạt động bình thường. Chúng ta sẽ thảo luận về hành vi của đối tượng trong chương tiếp theo của chúng ta.

Thống nhất – kết nối Phần cứng

Vấn đề chính với các va chạm trong chương trước là với mã. Bây giờ chúng tôi sẽ sửa đổi trực tiếp các giá trị của vị trí của GameObject . Chúng tôi chỉ đơn giản là thêm một giá trị vào vị trí, nếu người chơi đang nhấn một phím. Chúng tôi cần một cách để làm cho người chơi di chuyển theo cách mà nó phản ứng đúng với các ranh giới và các GameObject khác.

Để làm được như vậy, chúng ta cần phải hiểu các cơ quan cứng là gì . Rigidbodies là các thành phần cho phép GameObject phản ứng với vật lý thời gian thực . Điều này bao gồm các phản ứng với lực và trọng lực, khối lượng, lực cản và động lượng. Bạn có thể đính kèm Rigidbody vào GameObject của mình bằng cách chỉ cần nhấp vào Thêm thành phần và nhập Rigidbody2D vào trường tìm kiếm.

Unity - Tương tác

Nhấp vào Rigidbody2D sẽ gắn thành phần vào GameObject của bạn. Bây giờ nó đã được đính kèm, bạn sẽ nhận thấy rằng nhiều trường mới đã mở ra.

Unity - Tương tác

Với các thiết lập mặc định, GameObject sẽ rơi thẳng đứng xuống do trọng lực. Để tránh điều này, hãy đặt Gravity Scale thành 0.

Bây giờ, chơi trò chơi sẽ không cho thấy bất kỳ sự khác biệt rõ ràng nào, vì GameObject chưa liên quan gì đến thành phần vật lý của nó.

Để giải quyết vấn đề của chúng tôi, chúng ta hãy mở lại mã của mình và viết lại nó.

public class Movement : MonoBehaviour {
   public float speed;
   public Rigidbody2D body;
   // Update is called once per frame
   void Update() {
      float h = Input.GetAxisRaw(“Horizontal”);
      float v = Input.GetAxisRaw(“Vertical”);
      body.velocity = new Vector2(h * speed, v * speed);
   }
}

Chúng ta có thể thấy rằng chúng ta tạo một tham chiếu đến Rigidbody2D trong khai báo và mã cập nhật của chúng ta hoạt động trên tham chiếu đó thay vì biến đổi của Đối tượng. Điều này có nghĩa là Rigidbody đã được giao trách nhiệm di chuyển.

Bạn có thể mong đợi những cơ thể tham khảo để ném NullReferenceException, vì chúng ta đã không được giao bất cứ điều gì với nó. Nếu bạn biên dịch và chạy trò chơi như hiện tại, bạn sẽ gặp lỗi sau ở phía dưới bên trái của trình chỉnh sửa

Unity - Tương tác

Để khắc phục điều này, chúng ta hãy xem xét thành phần được tạo bởi script. Hãy nhớ rằng các thuộc tính công khai tạo các trường riêng của chúng trong Unity, như chúng ta đã làm với biến tốc độ.

Unity - Tương tác

Điều chỉnh tốc độ đến giá trị cao hơn, khoảng 5 và chơi trò chơi. Các va chạm của bạn bây giờ sẽ hoạt động chính xác!

Unity – Ranh giới va chạm tùy chỉnh

Trong chương này, chúng ta hãy tìm hiểu về ranh giới xung đột tùy chỉnh. Chúng ta cũng sẽ học cách điều chỉnh kích thước và hình dạng của các máy va chạm của chúng ta. Hãy để chúng tôi bắt đầu với Box Collider. Box Collider (2D) có 4 cạnh có thể điều chỉnh và có hình dạng giống như một hình chữ nhật. Trong thành phần của Collider, nhấp vào hộp này

Unity - Tương tác

Bạn sẽ thấy 4 “tay cầm” hiển thị trên máy va chạm. Bạn có thể kéo các tay cầm này xung quanh để điều chỉnh kích thước của chúng

Unity - Tương tác

Đối với các hình dạng đơn giản, Unity cũng phát hiện sự phù hợp nhất có thể cho hình dạng của máy va chạm, miễn là bạn chọn đúng. Ví dụ: chọn máy va chạm hình tròn trên hình tròn sẽ khớp với bán kính của nó.

Unity - Tương tác

Đối với các hình dạng phức tạp hơn, Unity sẽ cố gắng tạo ra hình dạng máy va chạm đơn giản nhất nhưng phức tạp nhất. Để làm được điều đó, bạn cần sử dụng Polygon Collider 2D .

Unity - Tương tác

Hãy thử nhấp vào nút Chỉnh sửa máy va chạm và thử nghiệm cách điều chỉnh các máy tương tác

Unity Hiểu Prefabs và Instantiation

Trả lời