Di chuyển đến một điểm
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 35 trên 85.
Vector3.MoveTowards(current, target, maxStep) trả về một điểm gần target hơn tối đa maxStep. Nếu mục tiêu ở gần hơn khoảng đó, hàm trả về chính mục tiêu, nên nó không bao giờ đi quá đích. Khi dùng speed * Time.deltaTime làm bước di chuyển, đối tượng di chuyển với tốc độ ổn định và dừng chính xác tại mục tiêu. Cáp treo này lướt đến ga với tốc độ 2 đơn vị mỗi giây:
public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}Khi đến nơi, mọi lần gọi sau đó đều trả về station, nên cáp treo đứng yên, và transform.position == station là true. Với một số đơn lẻ, Mathf.MoveTowards hoạt động theo cách tương tự.
Vector3.Lerp(a, b, t) là điểm nằm cách a một phần t quãng đường đến b: với t = 0.5, điểm đó nằm giữa quãng đường. Khi viết Lerp(transform.position, station, 2f * Time.deltaTime) trong Update(), đối tượng đi được một phần của quãng đường còn lại ở mỗi khung hình: lúc đầu nhanh, sau đó chậm dần khi gần đến đích, tiến lại gần thay vì đến nơi với tốc độ cố định. Dùng MoveTowards khi đối tượng cần di chuyển với tốc độ cố định và dừng chính xác; dùng mẫu Lerp đó để giảm tốc nhẹ nhàng.
Thử thách
Trung bìnhĐiều khiển drone bay đến bãi đáp khi nhấn phím Space.
- Thêm các trường
bool flying;vàbool landed;. KhiInput.GetKeyDown(KeyCode.Space), đặtflying = true;. - Khi
flying && !landed, di chuyển bằngVector3.MoveTowards(transform.position, pad, speed * Time.deltaTime). - Khi
transform.position == pad, đặtlandedvà ghi nhật kýLanded.
Nhấn Chơi, rồi nhấn Space: drone sẽ hạ cánh xuống bãi đáp. Sau đó, nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Drone : MonoBehaviour
{
public Vector3 pad = new Vector3(0, 0.25f, 0);
public float speed = 2f;
void Update()
{
// Sau khi nhấn Space: bay đến pad với tốc độ speed và ghi log Landed một lần khi đến nơi
}
}
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ơiTự luyện tập: Playground Unity