Thành phần bị thiếu
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 45 trên 85.
Khi thành phần bạn yêu cầu không có trên đối tượng, GetComponent không ngăn bạn tiếp tục. Trong Editor, nó trả về một đối tượng thay thế được xem là bằng null, và Unity sẽ báo lỗi ngay lần đầu code của bạn sử dụng đối tượng đó. Quả bóng này sẽ nhảy khi bạn nhấn Space, nhưng chưa có ai gắn Rigidbody cho nó:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * 300f);
}
}Nhấn Space sẽ in ra MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it. Thông báo cho biết kiểu dữ liệu còn thiếu và đối tượng đó. Bạn có thể thêm thành phần này trong Inspector hoặc, nếu đối tượng có thể cố ý không có thành phần đó, hãy kiểm tra trước. TryGetComponent(out rb) trả về true và gán giá trị cho rb khi thành phần có mặt, đồng thời trả về false mà không báo lỗi khi thành phần không có mặt (out cho phép phương thức trả về một giá trị thông qua biến):
bool canHop;
void Start()
{
canHop = TryGetComponent(out rb);
}Sau đó, Update() chỉ đẩy quả bóng khi if (canHop). Ngoài Editor, trong game đã build, GetComponent trả về null thông thường, nên lỗi tương tự sẽ xuất hiện dưới dạng NullReferenceException.
Thử thách
Trung bìnhLamp2 không có Light: hãy để Space bỏ qua nó và hiển thị rằng nó bị hỏng.
- Trong
Start(), thay dòngGetComponentbằnghasBulb = TryGetComponent(out bulb);, cùng với trườngbool hasBulb;. - Khi
hasBulblà false, tô màu chiếc đèn:GetComponent<Renderer>().material.color = Color.gray;. - Trong
Update(), chỉ bật hoặc tắt đèn khihasBulblà true.
Nhấn Chơi rồi nhấn Space: những chiếc đèn còn tốt sẽ bật hoặc tắt mà không có lỗi. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class LampSwitch : MonoBehaviour
{
Light bulb;
void Start()
{
bulb = GetComponent<Light>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
bulb.enabled = !bulb.enabled;
}
}
}
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