STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    Phân Biệt Awake và Start trong Unity

    Phân biệt phương thức Awake và phương thức Start trong Unity.
    17/04/2016 24/09/2020 3 phút đọc
    Phân Biệt Awake và Start trong Unity

    Trong quá trình phát triển game với Unity Engine, phương thức Start được dùng trong các trường hợp khởi tạo giá trị, khởi tạo đối tượng, … như là một phương thức thiết lập ban đầu. Phương thức Awake cũng thường được sử dụng như 1 sự khởi đầu nhưng có chút khác biệt.

    MonoBehaviour.Awake()

    Awake là phương thức được tự động gọi khi Script component được nạp. Awake chỉ được gọi duy nhất 1 lần. Phương thức này được dùng để khởi tạo bất cứ biến nào hoặc trạng thái game trước khi game bắt đầu.

    Phương thức Awake được gọi sau khi tất cả các đối tượng được khởi tạo vì thế có thể giao tiếp với các đối tượng khác hoặc truy vấn chúng.

    Mỗi hàm Awake của đối tượng trong game được gọi với thứ tự ngẫu nhiên giữa các đối tượng. Bởi vì điều này, có thể sử dụng Awake để thiết lập tham số giữa các Script component và dùng Start để chuyển bất kì tham số nào qua lại giữa chúng. Awake luôn được gọi trước Start, điều này cho phép có sắp xếp thứ tự khởi tạo của Script.

    Awake không thể là 1 co-routine. 

    MonoBehaviour.Start()

    Start được gọi trước lần gọi Awake đầu tiên ngay tại frame Script component được bật. Cũng giống như Awake, Start được gọi duy nhất 1 lần.

    Tuy nhiên, Awake được gọi khi đối tượng được khởi tạo, bất kể Script component có được bật hay tắt. Start có thể không được gọi trên cùng 1 frame với Awake nếu Script component không được bật ở thời điểm khởi tạo.

    Awake và Start

    Về cơ bản, AwakeStart là 2 phương thức được tự động gọi khi Script component được nạp. Awake được gọi đầu tiên ngay cả khi Script component không được bật và được dùng tốt nhất là để thiết lập các tham số giữa Script và việc khởi tạo. Start được gọi sau Awake và trước lần gọi Update đầu tiên nhưng chỉ khi Script component được bật.

    Ví dụ: Trong scene, GameObject có Script component:

    using UnityEngine;
    
    public class AwakeStartTester : MonoBehaviour {
    
        void Awake()
        {
            Debug.Log("Awake called");
        }
    
        void Start()
        {
            Debug.Log("Start called");
        }
    }

    Nhấn Play game và kết quả:

    awake-start-unity-1

    Điều này có nghĩa là dùng Start cho những mong muốn thực thi khi Script component được bật, nó cho phép trì hoãn bất cứ phần nào của việc khởi tạo cho đến khi điều đó thật sự cần thiết.

    Lưu ý

    Phương thức Awake của tất cả đối tượng trong scene được gọi trước bất kì phương thức Start của bất kì đối tượng nào.

    Ví dụ: Trong scene, có 2 đối tượng GameObjectAGameObjectB đều có Script component:

    using UnityEngine;
    
    public class AwakeTester : MonoBehaviour {
    
        void Awake()
        {
            Debug.Log("Awake() was called form " + this.name);
        }
    
        void Start ()
        {
            Debug.Log("Start() was called form " + this.name);
        }
    }

    Nhấn Play, có đoạn Log như sau:

    awake-start-unity

    Điều này hữu ích khi việc khởi tạo GameObjectA phải dựa vào GameObjectB đã được khởi tạo hay chưa, việc khởi tạo GameObjectB nên được hoàn thành ở phương thức Awake trong khi việc GameObjectA nên hoàn thành ở Start.

    • Trong trường hợp các đối tượng được tạo ra trong suốt quá trình chơi game, phương thức Awake của chúng sẽ được gọi tự động ngay sau khi phương thức Start của scene được hoàn thành.
    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.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo 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 - 2021