バージョン:Unity 2019.2.11f1 (64-bit)
以下に記載の機能
特定のゲームオブジェクトの選択状態を記録しておく機能で
オブジェクトを選択した状態で
Unityメニュー→Edit→SelectionのSave Selection 番号で、
ショートカットキーではCtrl+Alt+番号、で登録が出来て
そのあと、Ctrl+Shift+番号のショートカットキーを押す
この機能ですが、
Unityを閉じた後、再度、そのプロジェクトを開くと
設定が無くなってしまいます。
プロジェクトを再度起動した後でもこの設定を残す方法はありますでしょうか?
毎回、再設定するのが、かなり、めんどくさいため、
ぜひとも、よろしくお願いいたします
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
この機能は使ったことがありませんが、確かに一度閉じるとクリアされるようです。
スプリクトでエディタ拡張などを行い、代替機能を用意する方法があります。
即席ですが、一例として以下のスクリプトをEditorフォルダに配置すれば、仰せられた機能が実現できないでしょうか。
上記の意味が理解できない場合は分かる方に依頼した方が良いでしょう。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEditor; 5using System.Reflection; 6 7/// <summary> 8/// 選択状態の読み書きを行う(EditorPrefs拡張) 9/// </summary> 10public class SelectionSaver : Editor 11{ 12 // とりあえず3つだけ 13 // 既存のショートカットと競合するので手動で削除するか別のキーにすること 14 [MenuItem("Edit/SelectionSaver/Load Selection 1 %#1")] static void Load1() { SelectionSaverInstance.Instance.Load(0); } 15 [MenuItem("Edit/SelectionSaver/Load Selection 2 %#2")] static void Load2() { SelectionSaverInstance.Instance.Load(1); } 16 [MenuItem("Edit/SelectionSaver/Load Selection 3 %#3")] static void Load3() { SelectionSaverInstance.Instance.Load(2); } 17 18 [MenuItem("Edit/SelectionSaver/Save Selection 1 %&1")] static void Save1() { SelectionSaverInstance.Instance.Save(0); } 19 [MenuItem("Edit/SelectionSaver/Save Selection 2 %&2")] static void Save2() { SelectionSaverInstance.Instance.Save(1); } 20 [MenuItem("Edit/SelectionSaver/Save Selection 3 %&3")] static void Save3() { SelectionSaverInstance.Instance.Save(2); } 21} 22 23/// <summary> 24/// 機能本体 25/// </summary> 26public class SelectionSaverInstance 27{ 28 static SelectionSaverInstance instance; 29 30 long[] ids = new long[3]; 31 PropertyInfo inspectorModeInfo; 32 33 public static SelectionSaverInstance Instance 34 { 35 get 36 { 37 if (instance == null) 38 { 39 instance = new SelectionSaverInstance(); 40 } 41 42 return instance; 43 } 44 } 45 46 /// <summary> 47 /// 初期化とEditorPrefsからの読み込みを行う 48 /// </summary> 49 public SelectionSaverInstance() 50 { 51 inspectorModeInfo = typeof(SerializedObject).GetProperty("inspectorMode", BindingFlags.NonPublic | BindingFlags.Instance); 52 53 for (int i = 0; i < ids.Length; i++) 54 { 55 ids[i] = long.Parse(EditorPrefs.GetString("Selection" + i, "0")); 56 } 57 } 58 59 /// <summary> 60 /// id変換 61 /// </summary> 62 /// <param name="_object"></param> 63 /// <returns></returns> 64 public long GetObjectLocalIdInFile(Object _object) 65 { 66 long idInFile = 0; 67 SerializedObject serialize = new SerializedObject(_object); 68 inspectorModeInfo.SetValue(serialize, InspectorMode.Debug, null); 69 SerializedProperty localIdProp = serialize.FindProperty("m_LocalIdentfierInFile"); 70 idInFile = localIdProp.longValue; 71 return idInFile; 72 } 73 74 /// <summary> 75 /// リストとEditorPrefsに保存する 76 /// </summary> 77 /// <param name="key"></param> 78 public void Save(int key) 79 { 80 if (Selection.activeObject != null) 81 { 82 ids[key] = GetObjectLocalIdInFile(Selection.activeObject); 83 EditorPrefs.SetString("Selection" + key, ids[key].ToString()); 84 } 85 } 86 87 /// <summary> 88 /// リストから呼び出す 89 /// </summary> 90 /// <param name="key"></param> 91 public void Load(int key) 92 { 93 long id = ids[key]; 94 foreach (GameObject obj in Object.FindObjectsOfType(typeof(GameObject))) 95 { 96 if (GetObjectLocalIdInFile(obj) == id) 97 { 98 Selection.activeObject = obj; 99 break; 100 } 101 } 102 } 103}
投稿2020/02/11 03:10
総合スコア135
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/11 04:00
2020/02/11 04:39