Thắc mắc về hệ thống vật lý trong Unity

Bạn nào làm việc vơi Unity rồi cho mình hỏi chút.
Mình đang học Unity theo hướng dẫn này: https://unity3d.com/learn/tutorials/s/roll-ball-tutorial
Game này chỉ đơn giản là lăn quả cầu và lượm cái khối màu vàng.

Mình xem đến phần này: https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial/collecting-pick-objects?playlist=17141
Xử lý sự va chạm giữa Quả cầu và các khối vàng (Pick Up Object).

	void OnTriggerEnter(Collider other)
	{
		if (other.gameObject.CompareTag("Pick Up")) {
			other.gameObject.SetActive(false);
		}
	}

Script bắt sự kiện va chạm và set actice của game object Pick Up về false, làm nó biến mất.

Nhưng đoạn sau đó: https://youtu.be/XtR29MmzuT0?t=13m14s
Video có giải thích về việc Script hiện tại đã chạy được rồi nhưng chưa tối ưu. Đến đoạn này mình bắt đầu rối. Vì mới làm quen với Unity và vốn tiếng Anh không đủ để hiểu.
Mình hiểu bập bẹ thế này, nhưng có vẻ là sai:

Vấn đề này là do việc các Pick Up xoay liên tục ở hàm Update. Mà hàm này lại lặp liên tục ở mỗi frame. Mình có 12 Pick Up mỗi frame nó rotate 12 khối. Khi xử lý để làm Pick Up mất đi khi quả cầu chạm vào thì script dùng other.gameObject.SetActive(false);. Tuy nhiên sau khi làm như vậy thì Update của class Rotator vẫn tiếp tục rotato cho 12 Pick Up, trong khi đúng ra chỉ cần ratato cho cho ít hơn 12 khối.

Chỉ đoán được nội dung có vậy còn lại về phần hệ thống vật lý thì vẫn chưa hiểu gì :sweat_smile:
Vậy nên mình không hiểu vì sao lại nên add component Rigibody cho Pick Up? Và những giải thích khác về hệ thống vật lý trong Unity.
Vậy nên bạn nào làm việc với Unity và hiểu bản chất của Physics system trong Unity xin cho mình chút giải thích về vấn đề này (Unity’s Physics system). Xin cảm ơn! :blush:

Bài này có vẻ cơ bản, em đọc thử xem

Có thêm bài này

Nếu em muốn hiểu cơ bản về cơ học Newton (F = ma) thì tìm 1 cuốn vật lý đại cương mà đọc, tiếng Việt hay tiếng Anh cũng được!

3 Likes

Cảm ơn anh. Đúng mấy bài em đang cần. Đã thông não được phần nào :laughing:

1 Like

cái này bạn phải kiểu cơ chế update nó như thế nào. Căn bản thì game engine nào cũng có 2 thằng update. Thằng update lớn thì 1 frame nó gọi 1 lần còn thằng update nhỏ (ở unity là fixupdate) thì nó gọi nhiều lần. Bạn để ý thằng fixupdate trong unity nó đang để default time update của nó là 0.02 đó. nó dùng thằng fix này làm physic

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?