最終更新: kenken2020 2023年02月21日(火) 11:08:37履歴
目次
・トグルまでのパスとその途中にあるオブジェクトの説明
「FreeHScene(フリーHシーンの準備画面に関するアレコレ?)」→「Canvas(描画関連)」→「Panel(パネル)」
→「Normal(行為選択の通常を選んだ場合)」→「Stage(H段階)」→「Group(トグルグループ)」
→「First(初めて)」「Inexperience(不慣れ)」「Experience(慣れ)」「Lewdness(淫乱)」
・「GetComponent<Toggle>()」でトグルのコンポーネントを取得する
・「.isOn = true」にする事で対象のトグルだけがオンになる
・4段階あるH段階は以下の確率とする
「Random.Range(0, 101);」で0〜100の範囲で乱数を作成する
参考:【Unity】uGUI Toggleの使い方, スクリプトからの操作, タブ機能の実装:https://hiyotama.hatenablog.com/entry/2015/07/05/0...
・Toggleは子オブジェクトとしてBackground(Image)、Checkmark(Image)、Label(Text)を持っている
・Group→複数ToggleをまとめたToggleのグループを作り、グループの中では1つのToggleしかisOn:trueになれない機能
・スクリプト上でisOnの値を知る方法→Toggle.isOnプロパティで取得できる
→上記のメソッドはToggleのOnValueChangedから呼び出している
・OnValueChanged→ToggleのisOnが変わった時に、指定したオブジェクトのメソッドを呼び出す
→コールバック(AddListener?)
・Toggleは子オブジェクトとしてBackground(Image)、Checkmark(Image)、Label(Text)を持っている
・Group→複数ToggleをまとめたToggleのグループを作り、グループの中では1つのToggleしかisOn:trueになれない機能
・スクリプト上でisOnの値を知る方法→Toggle.isOnプロパティで取得できる
→上記のメソッドはToggleのOnValueChangedから呼び出している
・OnValueChanged→ToggleのisOnが変わった時に、指定したオブジェクトのメソッドを呼び出す
→コールバック(AddListener?)
- 基本的な流れ
・トグルまでのパスとその途中にあるオブジェクトの説明
「FreeHScene(フリーHシーンの準備画面に関するアレコレ?)」→「Canvas(描画関連)」→「Panel(パネル)」
→「Normal(行為選択の通常を選んだ場合)」→「Stage(H段階)」→「Group(トグルグループ)」
→「First(初めて)」「Inexperience(不慣れ)」「Experience(慣れ)」「Lewdness(淫乱)」
・「GetComponent<Toggle>()」でトグルのコンポーネントを取得する
・「.isOn = true」にする事で対象のトグルだけがオンになる
- 仕様
・4段階あるH段階は以下の確率とする
- 初めて:10%
- 不慣れ:20%
- 慣れ:50%
- 淫乱:20%
「Random.Range(0, 101);」で0〜100の範囲で乱数を作成する
//*************************** //慣れ度のランダム選択 //処女 var h_level_1 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/Stage/Group/First").GetComponent<Toggle>(); //不慣れ var h_level_2 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/Stage/Group/Inexperience").GetComponent<Toggle>(); //慣れ var h_level_3 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/Stage/Group/Experience").GetComponent<Toggle>(); //淫乱 var h_level_4 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/Stage/Group/Lewdness").GetComponent<Toggle>(); int h_level_rnd = Random.Range(0, 101); if (h_level_rnd >= 0 && h_level_rnd <= 10) { h_level_1.isOn = true; UnityEngine.Debug.Log(":処女:" + h_level_rnd); } else if (h_level_rnd > 10 && h_level_rnd <= 30) { h_level_2.isOn = true; UnityEngine.Debug.Log(":不慣れ:" + h_level_rnd); } else if (h_level_rnd > 30 && h_level_rnd <= 80) { h_level_3.isOn = true; UnityEngine.Debug.Log(":慣れ:" + h_level_rnd); } else if (h_level_rnd > 80 && h_level_rnd <= 100) { h_level_4.isOn = true; UnityEngine.Debug.Log(":淫乱:" + h_level_rnd); } //***************************
//*************************** //安全日・危険日をランダムで選択 //安全日 var hoge_03 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/State/Group/Safe").GetComponent<Toggle>(); //危険日 var hoge_04 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/State/Group/Danger").GetComponent<Toggle>(); int rnd = Random.Range(0, 2); if (rnd == 0) { hoge_03.isOn = true; UnityEngine.Debug.Log(":安全日:" + rnd); } else { hoge_04.isOn = true; UnityEngine.Debug.Log(":危険日:" + rnd); } //***************************
//*************************** //時間帯のランダム選択 //朝 var time_1 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/TimeZone/Group/morning").GetComponent<Toggle>(); //昼 var time_2 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/TimeZone/Group/noon").GetComponent<Toggle>(); //夕方 var time_3 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/TimeZone/Group/evening").GetComponent<Toggle>(); //夜 var time_4 = GameObject.Find("FreeHScene/Canvas/Panel/Normal/TimeZone/Group/night").GetComponent<Toggle>(); int time_rnd = Random.Range(0, 5); if (time_rnd == 0) { time_1.isOn = true; UnityEngine.Debug.Log(":朝:" + time_rnd); } else if (time_rnd == 1) { time_2.isOn = true; UnityEngine.Debug.Log(":昼:" + time_rnd); } else if (time_rnd == 2) { time_3.isOn = true; UnityEngine.Debug.Log(":夕方:" + time_rnd); } else if (time_rnd == 3) { time_4.isOn = true; UnityEngine.Debug.Log(":夜:" + time_rnd); } //***************************
using UnityEngine; using UnityEngine.EventSystems; // using static KKAPI.SceneApi; namespace FreeH_AUTO { public class GameObjectListMacro { public static void MacroMain() { var objectName = "GOL_FreeH_Key_Binding"; var shortcut = GameObject.FindObjectOfType<FreeH_AUTO>(); if (!shortcut) { var go = GameObject.Find(objectName); while (go) { GameObject.DestroyImmediate(go); go = GameObject.Find(objectName); } shortcut = new GameObject("GOL_FreeH_Key_Binding").AddComponent<FreeH_AUTO>(); GameObject.DontDestroyOnLoad(shortcut.gameObject); } } } //********************* //フリーHの自動化の処理 public partial class FreeH_AUTO : MonoBehaviour { //********************* //変数の定義 //初期化用 bool ini_flag = false; GameObject i_chaF_001; ChaControl cha_chaF_001; // GameObject h_proc; HSceneProc h_hoge; // HFlag hflags; HSprite hsprite; //愛撫の子オブジェクト達を入れる配列 Transform[] children_Aibu; //愛撫モーション切り替え用 int Aibu_Motion = 0; //モーションアイコンの選択段階フラグ int ai_flag = 0; //選んだ種類(愛撫か?奉仕か?挿入か?) int ai_flag_num = 0;// void ini() { // i_chaF_001 = GameObject.Find("chaF_001"); cha_chaF_001 = i_chaF_001.GetComponent<ChaControl>(); if (GetLoadSceneName() == "H") { //フリーH時の「HFlag」と「HSprite取得」を取得 h_proc = GameObject.Find("HSceneProc"); h_hoge = h_proc.GetComponent<HSceneProc>(); hflags = h_hoge.flags; hsprite = h_hoge.sprite; } //初期化フラグ ini_flag = true; //擬似的にクリック(愛撫) var hoge_01 = GameObject.Find("Canvas/ActionMenu/Aibu"); ExecuteEvents.Execute ( target: hoge_01.gameObject, eventData: new PointerEventData(EventSystem.current), functor: ExecuteEvents.pointerClickHandler ); ai_flag = 2; UnityEngine.Debug.Log("愛撫・初期ランダム化"); } void Update() { //ロード中でもフェード中でもない if (GetIsNowLoadingFade() == false) { //Hシーンの時のみ処理する if (GetLoadSceneName() != "H" /*|| GetLoadSceneName() != "VRHScene"*/) { ini_flag = false; } //Hシーンの時のみ処理する if (GetLoadSceneName() == "H" || GetLoadSceneName() == "VRHScene") { //初期化 if (ini_flag == false) { ini(); } //************************* //モーション選択メニュー if (ai_flag == 2) { //愛撫が選ばれた場合 if (ai_flag_num == 0) ai_aibu(); //モーション選択の進行段階 ai_flag = 3; } //************************* //----------- //デバッグ用キー(ai_flagのリセット用) if (Input.GetKeyDown(KeyCode.J)) { ai_flag = 2; //擬似的にクリック(愛撫) var hoge_01 = GameObject.Find("Canvas/ActionMenu/Aibu"); ExecuteEvents.Execute ( target: hoge_01.gameObject, eventData: new PointerEventData(EventSystem.current), functor: ExecuteEvents.pointerClickHandler ); } } } } } }
using UnityEngine; using UnityEngine.EventSystems; using TMPro; namespace FreeH_AUTO { public partial class FreeH_AUTO : MonoBehaviour { //********************* //愛撫系の処理 void ai_aibu() { //愛撫のオブジェクトを取得 var parent = GameObject.Find("Canvas/ActionSubMenu/Aibu/Viewport/AibuCategory"); //目標のオブジェクトがアクティブでヌルでない場合 if (parent != null) { // 子オブジェクト達を入れる配列の初期化 children_Aibu = new Transform[parent.transform.childCount]; for (int i = 0; i < parent.transform.childCount; i++) { // GetChild()で子オブジェクトを取得 children_Aibu[i] = parent.transform.GetChild(i); } //ランダムで愛撫の選択 //マップによって変わる愛撫数の最大数「parent.transform.childCount」 int rnd = Random.Range(0, parent.transform.childCount); //現在のモーションと違う場合 if (Aibu_Motion != rnd) { //愛撫の種類を代入する Aibu_Motion = rnd; //疑似クリックの対象を取得 var aibu = children_Aibu[Aibu_Motion].transform.gameObject; //選択された愛撫名の取得 GameObject child = aibu.transform.GetChild(1).gameObject; GameObject child2 = child.transform.GetChild(0).gameObject; UnityEngine.Debug.Log("選択された愛撫名::" + child2.GetComponent<TextMeshProUGUI>().text); //疑似クリック開始 ExecuteEvents.Execute ( target: aibu.gameObject, eventData: new PointerEventData(EventSystem.current), functor: ExecuteEvents.pointerClickHandler ); } } } } }
コメントをかく