■Unity開発メモ用のWiki◎現在扱っていること・Unity全般・MMDからUnityへの変換してインポート・MMDの仕様把握・BlenderでMMDモデルのカスタム

目次



一時メモ

ボタンをスクリプトで押す

フリーH準備場面からフリーHシーンに遷移
        //-----------
        //デバッグ用キー
        if (Input.GetKeyDown(KeyCode.J))
        {

            var go = GameObject.Find("FreeHScene");
            if (go)
            {
                freeHScene = go.GetComponent("FreeHScene") as FreeHScene;
                UnityEngine.Debug.Log("FreeHScene::" + go);
            }

            //リフレクションを通じてフィールドの値を取得する
            KKAPI.Utilities.Extensions.GetFieldValue(this, "freeHScene", out object freeHScene_value);
            KKAPI.Utilities.Extensions.GetFieldValue(freeHScene_value, "enterButton", out object enterButton_value);

            //リフレクションで取得したフィールドの値をボタン型の「push_button」に型変換して入れる
            //「onClick.Invoke()」でボタンが押された処理がされる?
            Button push_button;
            push_button = (Button)enterButton_value;
            push_button.onClick.Invoke();

            //freeHScene = null;
            UnityEngine.Debug.Log("***Button Insert is pressed.***");


        }

挿入中に女の子を喋らせる

KKS_VRでも確認済み
標準インストール時「C:\illusion\KoikatsuSunshine\abdata\h\list」にある「30.unity3d〜91.unity」までがセリフに関するデータ?
「personality_voice_c**」みたいなのが該当?
性格とシチュエーションで分かれている?

var flags = GameObject.FindObjectOfType<HFlag>();
if(flags.gaugeFemale < 70f)
{	flags.voice.playVoices[0] = UnityEngine.Random.Range(310, 315);
}
else{
	flags.voice.playVoices[0] = UnityEngine.Random.Range(316, 323);
}
  • 処女時?
→100・102
  • 愛撫時?
→110・120・130・140
  • 挿入中(快感ゲージが70未満の場合)
→310〜315
  • 挿入中(快感ゲージが70以上の場合)
→316〜323
  • 絶頂中?
→324〜326
  • 事後
→327〜336

[H]コンドーム着脱.ipm

KKS_VRでは確認できず
//挿入中でもコンドーム着脱できます・・・つまり・・・分かるな?
var hChara = GameObject.FindObjectOfType<HSprite>();
hChara.OnCondomClick();

[H]コンドーム召喚.ipm(正常動作未確認)

  • KKSではアイテムの召喚までは出来ても床に散らばらず
  • 「Rigidbody」とコライダーのコンポーネントを追加する?
  • アンセットバンドル?リソースからアイテムをゲーム内に登場させる参考になる
var condom = Resources.FindObjectsOfTypeAll<GameObject>().First(g => g.name == "p_gomu_tobi");
GameObject.Instantiate (condom, position, Quaternion.identity);

表情変更(固定)

KKS_VRでも確認済み
  • 表情は解除しないとそのまま!
  • 以下のGOLマクロはオブジェクト「FaceChangeObject」を作り、そこで「眉・目・口」を操作している
  • 複雑な操作はプラグイン「ExpressionControl」又は「FacePtnReplacer」で表情操作を行う
  • GOLマクロ例
    public class FaceChange : MonoBehaviour
    {
		private GameObject go;
		private ChaControl comp;

    	void Start()
    	{
			go=GameObject.Find("chaF_001");
			comp=go.GetComponent<ChaControl>();			
    	}

        void Update()
        {
		//メス顔
		comp.fbsCtrl.EyebrowCtrl.ChangePtn(13, true);//落胆
		comp.fbsCtrl.EyesCtrl.ChangePtn(4, true);//微小
		comp.fbsCtrl.MouthCtrl.ChangePtn(10, true);//真剣
                comp.ChangeHohoAkaRate(1.0f);//赤らめ
	}
}
表情例
//メス顔
comp.fbsCtrl.EyebrowCtrl.ChangePtn(13, true);//落胆
comp.fbsCtrl.EyesCtrl.ChangePtn(4, true);//微小
comp.fbsCtrl.MouthCtrl.ChangePtn(10, true);//真剣
comp.ChangeHohoAkaRate(1.0f);//赤らめ

//機嫌悪い顔
comp.fbsCtrl.EyebrowCtrl.ChangePtn(14, true);//ドヤ
comp.fbsCtrl.EyesCtrl.ChangePtn(10, true);//真剣
comp.ChangeHohoAkaRate(0.5f);//赤らめ
comp.fbsCtrl.MouthCtrl.ChangePtn(16, true);//呆れ

//不満顔
comp.fbsCtrl.EyebrowCtrl.ChangePtn(3, true);//つまらない
comp.fbsCtrl.EyesCtrl.ChangePtn(0, true);//でふぉ
comp.fbsCtrl.EyesCtrl.OpenMax = 1.0f;
comp.fbsCtrl.MouthCtrl.ChangePtn(15, true);//不満
comp.fbsCtrl.MouthCtrl.FixedRate = 0.0f;

//デフォ顔
comp.fbsCtrl.EyebrowCtrl.ChangePtn(0, true);
comp.fbsCtrl.EyesCtrl.ChangePtn(0, true);
comp.fbsCtrl.EyesCtrl.OpenMax = 1f;
comp.fbsCtrl.MouthCtrl.ChangePtn(5, true);//ドキドキ
comp.fbsCtrl.MouthCtrl.FixedRate = 0f;

//表情切替 固定した表情を解除
var go=GameObject.Find("FaceChangeObject");
if (go)
{
    var go1=GameObject.Find("chaF_001");
	var comp=go1.GetComponent<ChaControl>();
	comp.fbsCtrl.EyebrowCtrl.ChangePtn(0, true);
	comp.fbsCtrl.EyesCtrl.ChangePtn(0, true);
	comp.fbsCtrl.MouthCtrl.ChangePtn(0, true);
	comp.ChangeHohoAkaRate(0.0f);

    GameObject.DestroyImmediate(go);
}

涙レベルの変更

KKS_VRでも確認済み
マクロを実行する度に涙レベルを「0→1→2→3→0」と変更する
    public class TearsLevel : MonoBehaviour
    {
	private GameObject go;
	private ChaControl comp;
	private Byte tears_level;

    	void Start()
    	{
			go=GameObject.Find("chaF_001");
			comp=go.GetComponent<ChaControl>();
			tears_level=comp.tearsLv;

        	if (tears_level != 3) //涙レベルは0が無し、1〜3まで変化
        	{
	       		tears_level++; 
        	}
            else
            {
	        	tears_level=0;
        	}
    	}

        void Update()
        {
			comp.tearsLv=tears_level; //涙レベルはたえず更新する必要がある。
  	}
}

レイキャストでオブジェクト取得

        //レイキャストしたオブジェクトを出力
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, 10.0f))
        {
            UnityEngine.Debug.Log(hit.collider.gameObject.name);
        }

void MacroMain()のメモ

マクロが完成して1つのオブジェクトにまとめる場合

マクロ毎にオブジェクトが乱立するのを防ぎ、サンプルの場合「GOL_Macro_Test」に
マクロのコンポーネントをアタッチしていく

        //マクロをリロードした時にGameObjectを複数作らない様にする処理
        var go1 = GameObject.Find("GOL_Macro_Test");//マクロで作成したGameObjectを探している
        if (!go1)
        {
            //新しくゲームオブジェクトを作成する
            var go = new GameObject("GOL_Macro_Test").AddComponent<マクロに追加するコンポーネントの名前>();
            //シーンをまたいでも破壊されない
            GameObject.DontDestroyOnLoad(go.gameObject);
        }
        else if (go1.GetComponent<マクロに追加するコンポーネントの名前>() == null)
        {
            GameObject.Destroy(go1.GetComponent<マクロに追加するコンポーネントの名前>());
            
     go1.AddComponent<マクロに追加するコンポーネントの名前>();
            GameObject.DontDestroyOnLoad(go1.gameObject);
        }

何度も試行錯誤する場合

リロードする度にマクロのオブジェクトを破壊し作り直す
public class GameObjectListMacro
{
    public static void MacroMain()
    {
        //マクロをリロードした時にGameObjectを複数作らない様にする処理
        var go = GameObject.Find("GOL_Macro_Test");//マクロで作成したGameObjectを探している
        if (go)
        {
            //もしすでにゲームオブジェクトがあった場合、一度壊し(DestroyImmediate)新しく作り直す
            GameObject.DestroyImmediate(go);
        }
        //新しくゲームオブジェクトを作成する
        new GameObject("GOL_Macro_Test").AddComponent<Translate_SEX>();
        //シーンをまたいでも破壊されない
        GameObject.DontDestroyOnLoad(go.gameObject);
    }
}

シーンを取得する

UnityEngine.Debug.Log("現在のシーン::" + GetLoadSceneName());

各シーンの定義

  • タイトル画面→Title
  • 本編のHシーン→Aciton
  • フリーH設定画面→FreeH
  • フリーHシーン→H
  • VRのHシーン→VRHScene

シーンをまたいでも破壊されない

    public static void MacroMain()
    {
        //マクロをリロードした時にGameObjectを複数作らない様にする処理
        var go2 = GameObject.Find("GOL_Macro_Test");//マクロで作成したGameObjectを探している
        if (!go2)
        {
            //新しくゲームオブジェクトを作成する
            var go = new GameObject("GOL_Macro_Test").AddComponent<Translate_SEX>();

            //シーンをまたいでも破壊されない
            GameObject.DontDestroyOnLoad(go.gameObject);
        }
    }

添付サンプル関するメモ

GOLマクロ:[H][HS2]微細眼球運動.cs

  • すでにMODがあるのでそちらを使う?
  • 「KKS_FixationalEyeMovement」ではもう少し条件で複雑にしているっぽい?

以下のコードを次のように修正する

		leftEye = GameObject.Find("chaF_001/BodyTop/p_cf_body_bone/cf_j_root/cf_n_height/cf_j_hips/cf_j_spine01/cf_j_Spine02/cf_j_Spine03/cf_j_neck/cf_j_head/cf_s_head/p_cf_head_bone/cf_J_N_FaceRoot/cf_J_FaceBase/cf_J_FaceUp_ty/cf_J_FaceUp_tz/cf_J_Eye_tz/cf_J_Eye_txdam_L/cf_J_Eye_tx_L/EyeTargetL");
 		rightEye = GameObject.Find("chaF_001/BodyTop/p_cf_anim/cf_J_Root/cf_N_height/cf_J_Hips/cf_J_Spine01/cf_J_Spine02/cf_J_Spine03/cf_J_Neck/cf_J_Head/cf_J_Head_s/p_cf_head_bone/cf_J_FaceRoot/cf_J_FaceBase/cf_J_FaceUp_ty/cf_J_FaceUp_tz/cf_J_Eye_t_R/cf_J_Eye_s_R/cf_J_EyePos_rz_R");



		leftEye = GameObject.Find("chaF_001/BodyTop/p_cf_body_bone/cf_j_root/cf_n_height/cf_j_hips/cf_j_spine01/cf_j_spine02/cf_j_spine03/cf_j_neck/cf_j_head/cf_s_head/p_cf_head_bone/cf_J_N_FaceRoot/cf_J_FaceRoot/cf_J_FaceBase/cf_J_FaceUp_ty/cf_J_FaceUp_tz/cf_J_Eye_tz/cf_J_Eye_txdam_L/cf_J_Eye_tx_L/cf_J_Eye_rz_L/cf_J_hitomi_tx_L");
		rightEye = GameObject.Find("chaF_001/BodyTop/p_cf_body_bone/cf_j_root/cf_n_height/cf_j_hips/cf_j_spine01/cf_j_spine02/cf_j_spine03/cf_j_neck/cf_j_head/cf_s_head/p_cf_head_bone/cf_J_N_FaceRoot/cf_J_FaceRoot/cf_J_FaceBase/cf_J_FaceUp_ty/cf_J_FaceUp_tz/cf_J_Eye_tz/cf_J_Eye_txdam_R/cf_J_Eye_tx_R/cf_J_Eye_rz_R/cf_J_hitomi_tx_R");

  • 「cf_J_hitomi_tx_R」「cf_J_hitomi_tx_L」が瞳全体を制御している?


キー入力サンプル

押された入力をコンソールに出力するサンプル

参考:Unity - 入力されたキーの情報を取得する:https://qiita.com/pilkul/items/6351a967372541d9271...

サンプル


特定のキーが押されたときのサンプル

参考:【初心者Unity】GetKeyで判定できるキー一覧(KeyCode一覧):https://tech.pjin.jp/blog/2021/02/01/unity_csharp_...

サンプル

GOLショートカット設定用テンプレート

エラー:[Info : Console] MacroExecute() error, not found MacroName [[H]ヌク.ipm]
マクロがあるのに実行しない?

サンプル

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

管理人/副管理人のみ編集できます