やっつけ仕事ですが、下記のようなスクリプトをEditorフォルダに入れて、「City」を選択した状態でメニューの「Utility」→「Attach mesh colliders」を実行してみるとどうでしょう?
C#
1using System.Linq;
2using UnityEditor;
3using UnityEngine;
4
5public class AttachMeshColliders : MonoBehaviour
6{
7 [MenuItem("Utility/Attach mesh colliders")]
8 public static void Attach()
9 {
10 var selected = Selection.gameObjects;
11 foreach (var gameObject in selected)
12 {
13 // 選択されたオブジェクトおよび子階層からMeshFilterを持っているものを抜き出し、そのうちColliderを持っていないものを抜き出す
14 var objectsWithoutCollider = gameObject.GetComponentsInChildren<MeshFilter>()
15 .Select(m => m.gameObject)
16 .Distinct()
17 .Where(o => o.GetComponent<Collider>() == null);
18 foreach (var target in objectsWithoutCollider)
19 {
20 // MeshColliderを追加する
21 // 念のため取り消し履歴に記録を残すようにしました
22 // 完了まで数秒~数十秒フリーズするかもしれません
23 // 終わるとコンソールにずらずらと追加されたオブジェクトが並ぶと思います
24 Undo.AddComponent<MeshCollider>(target);
25 Debug.LogFormat(target, "Collider added: {0}", target.name);
26 }
27 }
28 }
29}
これでとりあえず各オブジェクトにMeshColliderを付けられると思いますが、プレイモードにしてみるとどうなるでしょうかね...このままだとパフォーマンス的に厳しいかもしれません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/24 01:41
2017/12/24 05:00
2017/12/24 05:27