Contents
Hệ Thống Vật Lý trong Unity
Unity cung cấp một hệ thống vật lý dựa trên Rigidbody và Collider để mô phỏng chức năng như trọng lực, ma sát, va chạm và lực tác động.
- Rigidbody: Dùng để áp dụng trọng lực và động lực cho các đối tượng.
- Collider: Phát hiện va chạm (Box Collider, Sphere Collider, Mesh Collider, etc.).
- Physics Materials: Để điều chỉnh ma sát và độ nẩy.
2. Lực và Trọng lực
a. Trọng lực
- Trọng lực tác động đến mọi đối tượng đọc lập.
- Bật Rigidbody để đối tượng chịu trọng lực.
Rigidbody rb = GetComponent<Rigidbody>();
rb.useGravity = true;
b. Áp dụng Lực
- Force: Áp dụng lực để di chuyển đối tượng.
rb.AddForce(Vector3.forward * 10f);
- Impulse: Tác động ngay lập tức.
rb.AddForce(Vector3.up * 5f, ForceMode.Impulse);
3. Va chạm và Collider
a. Loại Collider
- Box Collider: Hình hộp.
- Sphere Collider: Hình cầu.
- Mesh Collider: Hình dạng phức tạp.
b. Sự Kiện Va chạm
- OnCollisionEnter(): Gọ khi va chạm bắt đầu.
- OnCollisionExit(): Gọ khi va chạm kết thúc.
- OnTriggerEnter(): Khi đối tượng vào vùng trigger.
void OnCollisionEnter(Collision collision) {
Debug.Log("Va chạm với: " + collision.gameObject.name);
}
4. Ma Sát và Độ Nẩy
a. Physics Materials
- Dynamic Friction: Ma sát khi di chuyển.
- Static Friction: Ma sát khi đứng yên.
- Bounciness: Độ nẩy khi va chạm.
PhysicsMaterial2D material = new PhysicsMaterial2D();
material.bounciness = 0.5f;
material.friction = 0.3f;
5. Hệ Thống Động Lực (Kinematics)
- Is Kinematic: Loại bỏ tất cả tác động vật lý, cho phép điều khiển bằng script.
rb.isKinematic = true;
transform.position += Vector3.forward * Time.deltaTime;
6. Mô Phỏng Tương Tác
- Đối tượng được đẩy:
void PushObject(Rigidbody rb) {
Vector3 force = transform.forward * 10f;
rb.AddForce(force, ForceMode.Impulse);
}
- Kéo-thả:
void DragObject(Rigidbody rb) {
Vector3 direction = target.position - rb.position;
rb.AddForce(direction.normalized * 5f);
}
7. Khớp Nối (Joints)
- Hinge Joint: Tạo chuyển động quay.
- Spring Joint: Tác động như lò xo.
- Fixed Joint: Kết nối cố định.
HingeJoint hinge = gameObject.AddComponent<HingeJoint>();
hinge.anchor = new Vector3(0, 0, 0);
8. Tối Ưu Hóa Vật Lý
- Giảm số lượng Rigidbody và Collider khi không cần thiết.
- Sử dụng LOD (Level of Detail) cho đối tượng phức tạp.
Học xong phần này, bạn sẽ hiểu rõ các nguyên lý vật lý tương tác trong Unity và cách áp dụng để tạo ra những hiệu ứng sinh động trong trò chơi hoặc ứng dụng.