2013-04-23 5 views
7

Tôi có một trò chơi mà tôi muốn kích hoạt trong một điều kiện nhất định. Tôi đã cho nó một thẻ duy nhất và tôi đã thử sử dụng GameObject.FindObjectWithTag("Tag name"). Từ những gì tôi có thể nói, phương pháp này sẽ chỉ tìm thấy các đối tượng trò chơi đang hoạt động trong cảnh và không phải là các đối tượng không hoạt động.tìm thẻ trò chơi không hoạt động bằng thẻ trong unity3d

Có phương pháp nào mà tôi có thể gọi cũng sẽ tìm kiếm các đối tượng trò chơi không hoạt động không? (Tốt hơn là tìm kiếm theo thẻ).

Cảm ơn!

Trả lời

12

Sau một số nghiên cứu, có vẻ như không có cách nào để tìm một thẻ trò chơi không hoạt động theo thẻ.

giải pháp tồn tại tuy nhiên để truy cập gameobjects không hoạt động:

1 - Lưu trữ đối tượng trò chơi không hoạt động trong một mảng nếu bạn cần phải kích hoạt lại chúng sau đó (chỉ áp dụng cho trò chơi đối tượng bất hoạt khi chạy).

2 - Không tắt đối tượng trò chơi, chỉ cần hủy kích hoạt các thành phần bạn muốn không hoạt động. Nếu bạn muốn biến đối tượng biến mất, hãy hủy kích hoạt trình kết xuất đồ họa. Nếu đó là một tập lệnh cụ thể, hãy tắt tập lệnh đó, v.v.

Giải pháp này sẽ cho phép bạn vẫn tìm thấy đối tượng trò chơi theo tên thẻ của nó.

+0

dấu nó như là đúng, bởi vì nó là câu trả lời đúng thực sự. – Heisenbug

+0

Chắc chắn là đúng. Không thể tìm thấy đối tượng không hoạt động. Phải lưu trữ tham chiếu. –

+0

Điều này là sai. Bạn có thể nhận được các đối tượng không hoạt động. Xem bình luận dưới đây. RTFM. – Alex

1

FindObjectsOfTypeTìm thấy không hoạt động, nó cũng có thể tìm thấy prefabs và những thứ bạn không tìm kiếm, vì vậy bạn phải cẩn thận.

+0

Có, và nó rất chậm – RedOrav

5

Những điều mà có thể tìm thấy không hoạt động gameObjects:

transform.Find() or transform.FindChild() 
transform.GetComponentsInChildren<Component>(true) 

Resources.FindObjectsOfTypeAll<Component>() 

For more details.

+0

@ kleopatra: Sry. ... tôi sẽ ghi nhớ điều này. :) – Vineet

+0

Trong khi điều này có thể tìm thấy các đối tượng không hoạt động, nó sẽ không tìm thấy các đối tượng của Tag, đó là những gì tôi đã thực sự yêu cầu. – kUr4m4

+0

Không sử dụng 'Tài nguyên.FindObjectsOfTypeAll ()' trừ khi bạn biết mình đang làm gì. Điều này ảnh hưởng đến bất cứ điều gì trong tài nguyên, bao gồm cả prefabs. Điều này có nghĩa là bạn sẽ thực hiện ** thay đổi vĩnh viễn ** đối với tệp của mình và mọi thứ bên ngoài hiện trường, ngay cả sau khi bạn ngừng phát. –