Unity

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity. Chúng ta hãy xem xét dòng mã được hiển thị bên dưới để hiểu về coroutines là gì.

IEnumerator MyCoroutineMethod() {
   // Your code here…
   
   yield return null;
}

Nói chung, nếu bạn gọi một hàm trong Unity (hoặc C #, thực sự), hàm sẽ chạy từ đầu đến cuối. Đây là những gì bạn sẽ coi là hành vi “bình thường” khi có liên quan đến mã của bạn. Tuy nhiên, đôi khi chúng tôi muốn cố tình làm chậm một chức năng hoặc làm cho nó chờ lâu hơn khoảng thời gian tích tắc mà nó chạy. Một chương trình đăng quang có khả năng chính xác như vậy: một chương trình đăng quang là một chức năng có khả năng chờ và định thời gian cho quá trình của nó, cũng như tạm dừng hoàn toàn.

Chúng ta hãy xem xét một ví dụ để hiểu cách thức hoạt động của quy trình đăng ký. Giả sử chúng ta muốn tạo một hình vuông thay đổi màu của nó giữa màu đỏ và màu xanh lam trong khoảng thời gian 1 giây.

Để bắt đầu, chúng tôi tạo một sprite. Tiếp theo, tạo một tập lệnh mới và đặt tên là ColorChanger . Trong script này, chúng tôi nhận được một tham chiếu đến Sprite Renderer của sprite. Tuy nhiên, chúng tôi sẽ sử dụng một cách khác để lấy thành phần. Thay vì kéo và thả thành phần vào một vị trí như chúng ta đã làm cho đến nay, chúng ta sẽ yêu cầu mã phát hiện chính thành phần đó.

Điều này được thực hiện thông qua phương thức GetComponent , phương thức này trả về thành phần phù hợp đầu tiên mà nó phát hiện. Vì chúng tôi chỉ sử dụng một Sprite Renderer cho mỗi đối tượng, chúng tôi có thể sử dụng phương pháp này để tự động phát hiện và nhận tham chiếu đến trình kết xuất của chúng tôi mỗi lần.

Hãy nhớ rằng trình kết xuất có trách nhiệm làm cho hình vẽ thực sự hiển thị trên màn hình. Trình kết xuất có thuộc tính màu ảnh hưởng đến màu chung của hình vẽ; đây là giá trị sẽ được sửa đổi. Đặt giá trị Màu ở chế độ công khai sẽ cho phép chúng tôi chọn chúng thông qua trình chỉnh sửa trong chương trình chọn màu mặc định của hệ điều hành của bạn.

private SpriteRenderer sr;

public Color color1;
public Color color2;

void Start () {
   sr = GetComponent<SpriteRenderer>();
   StartCoroutine(ChangeColor());
}

IEnumerator ChangeColor() {
   
   while (true) {
      
      if (sr.color == color1)
         sr.color = color2;
      
      else
         sr.color = color1;
      
      yield return new WaitForSeconds(3);
   }
}

Bây giờ, chúng ta sẽ bẫy hàm coroutine của chúng ta trong một vòng lặp while.

Để tạo một chương trình điều tra trong C #, chúng ta chỉ cần tạo một phương thức trả về IEnumerator . Nó cũng cần một câu lệnh trả về lợi nhuận . Câu lệnh trả về lợi nhuận là đặc biệt; nó thực sự yêu cầu Unity tạm dừng tập lệnh và tiếp tục ở khung tiếp theo.

Có một số cách có thể được sử dụng để mang lại lợi nhuận; một trong số đó là tạo một thể hiện của lớp WaitForSeconds . Điều này khiến quy trình đăng quang phải chờ một khoảng thời gian nhất định trong thế giới thực trước khi tiếp tục.

Hãy để chúng tôi biên dịch mã của chúng tôi và quay trở lại Unity. Chúng tôi chỉ cần chọn màu sắc xen kẽ của chúng tôi và nhấn chơi. Đối tượng của chúng ta bây giờ sẽ chuyển đổi giữa hai màu trong khoảng thời gian 3 giây. Bạn có thể biến khoảng thời gian trở thành một biến công khai và cũng có thể điều chỉnh tần suất thay đổi màu sắc.

Coroutines được sử dụng rộng rãi cho các phương pháp hẹn giờ , giống như phương pháp chúng tôi vừa làm. Sự đa dạng của WaitForX phương pháp có mục đích riêng của họ. Coroutines cũng được sử dụng để chạy các quy trình “bên lề” tự chạy trong khi trò chơi chạy đồng thời. Điều này rất hữu ích, chẳng hạn, để tải các phần ngoài màn hình ở cấp độ lớn trong khi trình phát bắt đầu tại một điểm.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Unity – Bảng điều khiển

Bảng điều khiển là nơi chúng ta sẽ đọc kết quả đầu ra của Nhà phát triển . Các đầu ra này có thể được sử dụng để nhanh chóng kiểm tra các bit mã mà không cần phải cung cấp thêm chức năng để kiểm tra.

Có ba loại thông báo xuất hiện trong bảng điều khiển mặc định. Những thông báo này có thể liên quan đến hầu hết các tiêu chuẩn của trình biên dịch –

  • Lỗi
  • Cảnh báo
  • Tin nhắn

Lỗi

Lỗi là những vấn đề hoặc ngoại lệ mà sẽ ngăn chặn các mã chạy ở tất cả .

Cảnh báo

Cảnh báo là những vấn đề sẽ không ngăn mã của bạn chạy, nhưng có thể gây ra sự cố trong thời gian chạy.

Tin nhắn

Tin nhắn là kết quả đầu ra để truyền tải điều gì đó đến người dùng; chúng thường không làm nổi bật các vấn đề.

Chúng tôi thậm chí có thể yêu cầu Bảng điều khiển xuất ra các thông báo, cảnh báo và lỗi của riêng chúng tôi. Để làm như vậy, chúng ta sẽ sử dụng lớp Gỡ lỗi. Lớp Gỡ lỗi là một phần của MonoBehaviour, lớp này cung cấp cho chúng ta các phương thức để ghi thông báo vào Bảng điều khiển, khá giống với cách bạn tạo thông báo đầu ra bình thường trong các chương trình khởi động của mình.

Bạn có thể tìm thấy Bảng điều khiển trong tab được gắn nhãn phía trên vùng Nội dung.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Đầu ra của bảng điều khiển hữu ích hơn cho lập trình viên , không phải người dùng cuối hoặc người chơi.

Hãy để chúng tôi thử viết một tin nhắn đơn giản tới Bảng điều khiển. Điều này sẽ thông báo cho chúng tôi khi phím Space được nhấn. Đối với điều này, chúng tôi sẽ sử dụng phương thức Nhật ký , lấy một Đối tượng làm tham số, mà chúng tôi sẽ sử dụng một chuỗi trong đó.

Bạn có thể bắt đầu với một tập lệnh mới hoặc sửa đổi một tập lệnh hiện có.

void Update() {
   if (Input.GetKeyDown(KeyCode.Space))
      Debug.Log(“Space key was pressed!”);
}

Lưu, biên dịch và chạy mã này (tất nhiên bằng cách gắn nó vào GameObject), hãy thử nhấn phím cách.

Lưu ý – Quan sát rằng thông báo hiển thị ở cuối trình chỉnh sửa.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Nếu bạn nhấp vào tab Bảng điều khiển, bạn sẽ thấy thông báo của mình được in ra.

Tương tự, bạn cũng có thể xuất ra các cảnh báo bằng cách sử dụng phương thức LogWarning và các lỗi với phương thức LogErro r. Những điều này sẽ tỏ ra hữu ích để kiểm tra các đoạn mã nhỏ mà không thực sự phải triển khai chúng, như bạn sẽ thấy ở phần sau.

Unity – Giới thiệu về Âm thanh

Có một lý do tại sao trò chơi chú trọng vào âm thanh; nó là khá quan trọng để thêm giá trị thẩm mỹ cho trò chơi. Ngay từ tiếng Pong đầu tiên , người ta có thể nghe thấy tiếng bíp và tiếng bíp xen kẽ từ quả bóng đập vào mái chèo. Đó là một mẫu sóng vuông ngắn thực sự đơn giản vào thời điểm đó, nhưng bạn còn muốn gì hơn nữa từ ông tổ của tất cả các trò chơi điện tử?

Trong cuộc sống thực, nhiều thứ ảnh hưởng đến cách bạn cảm nhận âm thanh; tốc độ của đối tượng, loại kịch bản và nó đến từ hướng nào.

Có một số yếu tố có thể tạo ra tải trọng không cần thiết trên động cơ của chúng tôi. Thay vào đó, chúng tôi cố gắng tạo ra ý tưởng về cách âm thanh của chúng tôi sẽ hoạt động trong trò chơi của chúng tôi và xây dựng xung quanh điều đó. Điều này trở nên đặc biệt nổi bật trong các trò chơi 3D, nơi có 3 trục để giải quyết.

Trong Unity, chúng tôi có các thành phần chuyên dụng để cảm nhận và phát lại âm thanh. Các thành phần này kết hợp với nhau để tạo ra một hệ thống âm thanh đáng tin cậy, mang lại cảm giác tự nhiên cho trò chơi.

Unity cung cấp cho chúng ta một loạt các công cụ và hiệu ứng hữu ích như reverb, hiệu ứng Doppler, hiệu ứng và trộn thời gian thực, v.v. Chúng ta sẽ tìm hiểu về những công cụ này trong các chương tiếp theo.

Các thành phần âm thanh

Trong phần này, chúng ta sẽ tìm hiểu về 3 thành phần chính liên quan đến âm thanh trong Unity.

Nguồn âm thanh

Thành phần Nguồn âm thanh là thành phần chính mà bạn sẽ gắn vào GameObject để làm cho nó phát âm thanh. Nó sẽ phát lại một AudioClip khi được kích hoạt thông qua bộ trộn, thông qua mã hoặc theo mặc định, khi nó hoạt động. AudioClip chỉ đơn giản là một tệp âm thanh được tải vào Nguồn âm thanh. Nó có thể là bất kỳ tệp âm thanh tiêu chuẩn nào, chẳng hạn như .mp3, .wav, v.v. AudioClip cũng là một thành phần trong chính nó.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

AudioListener

AudioListener là thành phần lắng nghe tất cả âm thanh đang phát trong cảnh và chuyển nó đến loa của máy tính. Nó hoạt động giống như tai của trò chơi. Tất cả âm thanh bạn nghe được đều dựa vào vị trí của AudioListener này. Chỉ nên có một AudioListener để nó hoạt động bình thường. Theo mặc định, máy ảnh chính có Listener được gắn vào nó. Listener không có bất kỳ thuộc tính lộ diện nào mà nhà thiết kế muốn quan tâm.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Bộ lọc âm thanh

Đầu ra của Nguồn âm thanh hoặc đầu vào của Bộ nghe âm thanh có thể được sửa đổi với sự trợ giúp của Bộ lọc âm thanh. Đây là những thành phần cụ thể có thể thay đổi hồi âm, điệp khúc, lọc, v.v. Mỗi bộ lọc cụ thể đi kèm như một thành phần riêng của nó với các giá trị hiển thị để điều chỉnh âm thanh của nó.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Phát âm thanh

Hãy để chúng tôi thử tạo một nút phát âm thanh khi nó được nhấp vào. Để bắt đầu, chúng ta sẽ Tạo một sprite Circle và làm cho nó có màu đỏ.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Bây giờ, hãy để chúng tôi đính kèm Nguồn âm thanh vào sprite này.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Đối với đối tượng để phát âm thanh, chúng ta phải cung cấp cho nó một âm thanh. Hãy để chúng tôi sử dụng hiệu ứng âm thanh này cho mục đích của chúng tôi.

http://www.orangefreesounds.com/ding-sfx/

Tải xuống hiệu ứng âm thanh và kéo nó vào Nội dung.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Khi Unity nhập nội dung này dưới dạng tệp âm thanh, nội dung đó sẽ tự động được chuyển đổi thành Kẹp âm thanh . Do đó, bạn có thể kéo đoạn âm thanh này từ Nội dung trực tiếp vào khe Đoạn âm thanh trong Nguồn âm thanh của sprite của chúng tôi.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Sau khi bạn kéo đoạn âm thanh từ Nội dung trực tiếp vào khe Đoạn âm thanh trong Nguồn âm thanh của sprite của chúng tôi, hãy nhớ bỏ chọn “Phát khi thức tỉnh” trong thuộc tính Nguồn âm thanh; không làm như vậy sẽ làm cho âm thanh phát ngay khi trò chơi bắt đầu.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Bây giờ, chúng ta hãy xem mã của chúng ta. Tạo một tập lệnh mới có tên “BellSound” và mở nó lên.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Vì Nguồn âm thanh của chúng tôi được kiểm soát thông qua mã, nên trước tiên chúng tôi muốn tham chiếu đến nó. Chúng tôi sẽ sử dụng phương thức GetComponent như trước đây.

public class BellSound : MonoBehaviour {
   AudioSource mySource;
   // Use this for initialization
   void Start () {
      mySource = GetComponent<AudioSource>();
}

Bây giờ, chúng ta hãy thiết lập phương thức để phát hiện đối tượng đang được nhấp vào. MonoBehaviour chỉ cung cấp cho chúng tôi phương pháp chúng tôi cần cho nó, có tên là OnMouseDown. Phương thức này được gọi bất cứ khi nào con chuột nhấp trong phạm vi của một máy va chạm của gameObject đó.

Vì chúng tôi chưa gắn máy va chạm vào nút của mình, hãy để chúng tôi làm như vậy ngay bây giờ.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Chúng tôi sẽ không cần một Rigidbody cho cái này; chúng ta cũng không cần phải truy cập máy va chạm này bằng mã. Nó chỉ cần có ở đó để phương pháp hoạt động. Hãy để chúng tôi kiểm tra phương pháp này và xem nó có hoạt động không. Viết mã sau vào tập lệnh của bạn và đính kèm vào nút.

void OnMouseDown() {
   Debug.Log(“Clicked!”);
}

Sau khi bạn lưu tập lệnh và đính kèm, hãy chơi trò chơi. Nhấp vào nút sẽ xuất hiện một thông báo trong Bảng điều khiển.

Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity

Bây giờ bạn chỉ còn một bước nữa để phát âm thanh. Tất cả những gì bạn phải làm bây giờ là gọi phương thức Play trong phiên bản Nguồn âm thanh.

void OnMouseDown() {
   mySource.Play();
}

Lưu tập lệnh của bạn và chạy nó trong trò chơi. Nhấp vào nút và bạn sẽ nghe thấy âm thanh phát ra!

Lưu ý – Cân nhắc tạo một nút tăng cao độ mỗi khi bạn nhấp vào nó. Sử dụng mySource.pitch và một bộ đếm và xem liệu bạn có thể tìm ra nó hay không.)

Unity – Bắt đầu với giao diện người dùng (xem thêm)

Trả lời