Update và LateUpdate
Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 71 trên 85.
Ở mỗi khung hình, Unity gọi Update() trên từng script. Chỉ khi tất cả các script chạy xong, Unity mới gọi LateUpdate() trên từng script. Bạn không thể quyết định Update() của đối tượng nào chạy trước.
Điều này quan trọng với mọi thứ phụ thuộc vào thứ khác. Một camera sao chép vị trí của người chơi trong Update() có thể chạy trước khi Update() của chính người chơi di chuyển họ. Khi đó, camera sao chép vị trí của người chơi từ một khung hình trước: camera luôn chậm hơn một nhịp. Việc này có xảy ra hay không có thể thay đổi khi bạn thêm đối tượng hoặc tải lại cảnh. Trong LateUpdate(), thao tác sao chép luôn diễn ra sau khi người chơi di chuyển:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
void LateUpdate()
{
transform.position = player.position + offset;
}Quy tắc: di chuyển mọi thứ trong Update(), còn đặt code phản ứng với vị trí cuối cùng của các đối tượng, chẳng hạn như camera, nhãn và thao tác ngắm, trong LateUpdate(). Cả hai đều chạy một lần mỗi khung hình, và Time.deltaTime có cùng ý nghĩa trong cả hai.
Thử thách
Trung bìnhGiữ thẻ tên nằm ngay phía trên nhân vật trong mỗi khung hình.
- Thêm
void LateUpdate(), hàm này chạy sauUpdate()của mọi tập lệnh. - Chuyển phần
if (target != null)vào hàm này, đồng thời chỉ giữ phần di chuyển bằng phím mũi tên trongUpdate(), bên trongif (target == null).
Nhấn Chơi rồi giữ một phím mũi tên: thẻ tên luôn nằm ngay phía trên nhân vật. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Mover : MonoBehaviour
{
public Transform target;
public Vector3 offset;
public float speed = 4f;
void Update()
{
if (target != null)
{
transform.position = target.position + offset;
}
else
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
}
}
}
Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity
1C# cơ bản trong Unity
Xin chào, UnityBiếnSố thập phân cần có fVăn bản trong ConsoleBiến có thể ghi nhớIf và elseSo sánh các sốÔn tập: Thu thập xu7Vòng lặp và phương thức
Lặp lại với forVòng lặp lồng nhauViết phương thứcPhương thức trả lờiMảngÔn tập: Cầu thang2Làm cho nó chuyển động
Đặt khối lập phươngDi chuyển theo từng khung hìnhXoay mỗi giâyĐiều khiển bằng các phímÔn tập: Lái khối lập phương5Vectơ
Cộng vectơPhương hướngKhông gian cục bộ và không gian thế giớiTốc độ theo đường chéoKhoảng cách giữa các vậtVector3 là một structÔn tập: Người điều khiển drone8GameObject và thành phần
Tham chiếu trong InspectorLấy một thành phầnThành phần bị thiếuThêm một thành phầnRequireComponentHiện và ẩnÔn tập: Công tắc đèn3Inspector
Các trường trong InspectorSerializeFieldSố thực và MathfThuộc tính trong InspectorÔn tập: thang máy6Biến đổi và hệ phân cấp
Đối tượng cha và conKéo cờ lênTỷ lệNhìn vào các vật thểDi chuyển đến một điểmÔn tập: Mặt trăng quay quanh9Dự án: Bắt lấy ngôi sao
Người bắt saoNgôi sao rơi12Vòng đời của script
Awake và StartUpdate và LateUpdateOnEnable và OnDisableThứ tự vòng đờiÔn tập: Trình ghi nhật ký vòng đờiTự luyện tập: Playground Unity