これはなに?
一部のUIのRaycastTargetをごっそり一括で変更したいときがありませんか?あります。あるんです。
同じComponentだと。複数選択→トグルでいいのですが、違うComponentのものも変えたくなったので書きました。
あと、Prefabビューなら最初からオフにするものを書いていたりします。
kakovail.info
使い方
スクリプトを好きなところに配置、変更したいオブジェクトを複数選択→右クリックからメニューでToggleできます。
2019.4.18で書いていますが、TryGetComponentを使わなかったので2018.1以降なら確実に動くと思います。
コード
// Copyright (c) 2021 Hiroyuki Kako // This software is released under the MIT License, see LICENSE. #if UNITY_EDITOR using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.UI; public class SelectedRaycastChanger : EditorWindow { private static int _currentCount; private static List<GameObject> _cachedObjects = new List<GameObject>(); [MenuItem("GameObject/KEditorExtensions/SelectedRaycastChanger/Toggle : true", false, 20)] public static void ToggleRaycastTargetTrue() { var tmp = Selection.gameObjects; ToggleRaycastTarget(tmp, true); _currentCount++; if (_currentCount == tmp.Length) _cachedObjects.Clear(); } [MenuItem("GameObject/KEditorExtensions/SelectedRaycastChanger/Toggle : false", false, 20)] public static void ToggleRaycastTargetFalse() { var tmp = Selection.gameObjects; ToggleRaycastTarget(tmp, false); _currentCount++; if (_currentCount == tmp.Length) _cachedObjects.Clear(); } private static void ToggleRaycastTarget(GameObject[] selected, bool isActive) { foreach (var obj in selected) { if (_cachedObjects.Contains(obj)) continue; _cachedObjects.Clear(); _cachedObjects = new List<GameObject>(selected); _currentCount = 0; break; } foreach (var cachedObject in _cachedObjects) { var target = cachedObject.GetComponent<Graphic>(); if (target == null) continue; // you can use TryGetComponent target.raycastTarget = isActive; Debug.Log($"{cachedObject.name} 's raycast target is toggle {isActive.ToString()}", cachedObject); } } } #endif