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


目次


衣装・バリエーション変更MOD

事前準備・CKでの作業

◎CKでESPを読み込む時、同時に「UIExtensions.esp」も読み込みマスター指定する


◎衣装変更したいArmorのセットをOutifitリスト(コーデセット)として作成する
例)
Armor「ブレザー(黒)+スカート+タイツ+ローファー」をOutifitリストとしてまとめる
Armor「ブレザー(黒・半脱ぎ)+スカート+タイツ」をOutifitリスト「Outifit_Set_A02」としてまとめる
 →上記「Outifit_Set_A01」の衣装変更バリエーション


◎フォームリストを作成しOutifitリスト(標準衣装セットとその衣装の変更バリエーション)を登録する
・フォームリストは「標準衣装セットとその衣装の変更バリエーションを登録したOutifitリスト」と
 上記のフォームリストをまとめたフォームリストの2種類ある


◎CKでフォームリストをスクリプトのプロパティと結びつける?


◎パピルスコンパイラの設定「Advanced Papyrus.ini」に「UIExtensions」のスクリプトへのパスを追記する

衣装変更MODメモ

男の場合は処理を中断する(衣装の処理は男女別にする)
	;男の場合は処理を中断する
	if ActorRef.GetActorBase().GetSex() == 0
			Debug.Trace("@@@:Faild!!!:Not Female!")
			return false
	endif
フォームリストを配列に収納する
	;フォームリストを配列に収納する(メインメニュー)
	Form[] Fuku_Form = OurfitList.ToArray()
メインメニューの処理
	;--------------------
	;---メインメニューの処理---
	;--------------------
	;フォームリストを配列に収納する(メインメニュー)
	;フォームリスト「OurfitList」はCKで予めプロパティ設定しておく
	Form[] Fuku_Form = OurfitList.ToArray()
	;リストUIの作成(メインメニュー)
	UIListMenu listMenu = UIExtensions.GetMenu("UIListMenu") as UIListMenu
	;第1段落のメニュー設定(メインメニュー)
	Corde_Main(listMenu)
	;メニューをゲーム上で表示する(メインメニュー)
	listMenu.OpenMenu()	
◎選んだメニューの結果を取得する(メインメニュー)
	;選んだメニューの結果を取得する(メインメニュー)
	int result = listMenu.GetResultInt()
	string sResult =listMenu.GetResultString()
	Debug.Trace("@@@:result:Main:" + result +"::"+sResult)
◎メニューの戻り値が想定外の場合
	;メニューの戻り値が想定外の場合
	if result == -1
		Debug.Trace("@@@:Faild!!!:Mian menue")
		return false
	endif
サブメニューの処理

アクターに適用するOutifit情報を取得する
	;--------------------------------------
	;---アクターに適用するOutifit情報を取得する---
	;--------------------------------------
	;先程取得したメインメニュー用フォームリスト「Fuku_Form[result]」を
	;新しく定義したサブメニュー用のフォームリスト「OurfitList_Sub」に入れる
	FormList OurfitList_Sub = Fuku_Form[result] as Formlist
	;フォームリストを配列に収納する(サブメニュー)
	Form[] Fuku_Form_sub = OurfitList_Sub.ToArray()
	;取得したいOutfit(コーデセット)のフォームリスト(サブメニュー用)
	Outfit outfit_ref = Fuku_Form_Sub[result_Sub] as outfit
	Debug.Trace("@@@:FormID(SUB)::" + Fuku_Form_sub[result_Sub])
アクターにOutifitを適用する
	;----------------------
	;アクターにOutifitを適用する
	;----------------------
	;ユニークでないアクターの衣装変更を行う場合「ActorBase」に適用させる
	;ユニークなアクターの衣装変更を行う場合「Actor」に適用させる
	ActorRef.SetOutfit(outfit_ref)

暫定ソースコード(2023-08-21)

体位選択MOD(SkyUILibを使用)

◎Script
My_Spell_PositionSelector_MagicEffect.psc
My_Spell_PositionSelector_Ailias.psc
◎Quest
My_Quest_PositionSelector
◎MagicEffct(魔法効果)
My_MagicEffct_PositionSelector
◎Spell
My_Spell_PositionSelector
◎Book
My_SpellTome_PositionSelector

スクリプトメモ

◎グローバル?変数の定義
;-----------------------------
;グローバル?変数の定義
;-----------------------------
;体位別のモーションリスト
sslBaseAnimation[] Anim_List_Sub
;取得したスレッドコントローラーから参加中のアクターのリストを取得
Actor[] Positions
;現在再生中のモーション名を取得
string Now_Ani
;指定するタグ
string tag_Base = "sex"
;除外するタグ一覧
;Aggressive(レイプ) , LeadIn(前戯) , InvisFurn(家具)
string tag_NO_01 = "Aggressive,LeadIn,InvisFurn"

◎変数
	;アクターが現在関連付けられているスレッド コントローラーを検索
	sslThreadController controller
	controller =SexLab.GetActorController(ActorRef)

	;取得したスレッドコントローラーから参加中のアクターのリストを取得
	Actor[] Positions = controller.Positions
	;現在再生中のモーション名を取得
	string Now_Ani = controller.Animation.Name

	;再生中のアニメーションリストを取得(大元のアニメーションリスト)
	sslBaseAnimation[] Anim_List_Main
	Anim_List_Main = controller.Animations
対象がセックス中かの判定
	;-------------------
	;対象がセックス中かの判定
	;-------------------
	bool Act_Now_Sex = SexLab.IsActorActive(ActorRef)
	if Act_Now_Sex == true
		Debug.Trace("@@@:対象:"+ActorRef.GetLeveledActorBase().GetName()+"はセックス中!!!")
	else
		Debug.Trace("@@@:対象:"+ActorRef.GetLeveledActorBase().GetName()+"はセックス中でない")
		;セックス中でない場合は処理を飛ばす
		return false
	endif
UILIBの定義
	;-----------
	;UILIBの定義
	;----------
	;UILIBはこのスクリプトの取り付けているオブジェクト(Quest)に取り付ける
	;↑エイリアス(PlayerRef)ではなくQuestの方にUILIBのスクリプトを取り付ける!
	;MODのESP名とUILIBを取り付けたクエストのフォームIDからフォームを取得し、UILIB_1型にキャストする
	;UILIB_Nの「N」はバージョン?「1」で良い?
	UILIB_1 UILib = Game.GetFormFromFile(0x052D57, "My_Spell_01.esp") as UILIB_1
	;UILIBが取得出来たかの確認
	;Debug.Trace("@@@:UILib:"+UILib)
	

UILIBによるメニューの表示(メインメニュー)
	;--------------
	;メインメニューの表示
	;--------------
	;リストメニュー用の配列(メインメニュー)
	String[] sOptions = new String[5]
	;リストメニューの内容を定義
	sOptions[0] = "0:キャンセル"
	sOptions[1] = "1:正常位"
	sOptions[2] = "2:バック"
	sOptions[3] = "3:騎乗位"
	sOptions[4] = "4:"
	;選択したエントリのインデックス用
	Int iInput
	;タイトル、エントリのリスト、開始インデックス、関数に渡されたデフォルトのインデックスを含むリスト メニューを表示する
	;UILib.ShowList( メニューの上部に表示されるタイトル, 表示されるエントリのリスト, メニューが開いたときに選択されるエントリのインデックス, デフォルトのエントリのインデックス)
	iInput = UILib.ShowList("体位の選択", sOptions, 1, 0)
	Debug.Trace("@@@:選択されたメニューのインデックス(メイン)["+iInput+"]")

UILIBによるメニューの表示(サブメニュー)
	;-------------
	;サブメニューの表示
	;-------------
	;サブメニューの戻り値用
	Int iInput2
	;アニメーションのタグ用
	string tag_Add
	;リストメニューの内容を定義
	;配列の定義はもっと良い感じに出来ないか?
	String[] sOptions_sub = new String[15]

	;------------------------
	;選択肢「キャンセル」が選ばれた場合
	if iInput == 0
		return false
	endif
	;選択肢「正常位」が選ばれた場合
	if iInput == 1
		;指定するタグ
		;「,」を忘れない事!
		tag_Add =",Missionary"
	endif
	;選択肢「バック」が選ばれた場合
	if iInput == 2
		tag_Add =",DoggyStyle"
	endif
	;選択肢「騎乗位」が選ばれた場合
	if iInput == 3
		tag_Add =",Cowgirl"
	endif
再生するアニメーションリストを作成する
	;---------------------------
	;再生するアニメーションリストを作成する
	;---------------------------
	Debug.Trace("@@@:Show_List():")
	;指定するタグ
	tag_Add = tag_Base + tag_Add
	;SexLab.GetAnimationsByTags(<参加するアクターの人数>, "指定するタグ(カンマ区切り)","除外るタグ(カンマ区切り)",<タグの指定条件をAND又はORにするか>)
	Anim_List_Sub = SexLab.GetAnimationsByTags(Positions.Length, tag_Add, tag_NO_01, true)
	;アニメーションリストの長さ
	Debug.Trace("@@@:Anim_List_1.Length:" + Anim_List_Sub.Length)
	;アニメーションリストを作成
	int i = 0
	While i < Anim_List_Sub.Length
		sOptions_sub[i] = "["+i+"]" + Anim_List_Sub[i].Name
		i += 1
	EndWhile

	;リストメニューを表示する
	iInput2 = UILib.ShowList("体位の選択(サブ)", sOptions_sub, 0, 0)
	Debug.Trace("@@@:選択されたメニューのインデックス(サブ)[" + iInput2 + "]")
アニメーションリストを変更する
	;---------------------
	;アニメーションリストを変更する
	;---------------------
	;アニメーション制御スレッドにアニメーションリストを登録する
	controller.setanimations(Anim_List_Sub)
	;アクターの整列?SexLabのホットキーにある機能?
	controller.RealignActors()
	;アニメーションを変更する・アニメーションリストの配列番号?を指定する?
	Controller.SetAnimation(iInput2)
	;ステージ進行度の変更
	controller.GoToStage(2)
	;デバッグ用
	Now_Ani = controller.Animation.Name
	Debug.Trace("@@@:ChangeAnimation:"+Anim_List_Sub[iInput2].Name+" Anim:"+Now_Ani)

暫定ソースコード(2023-08-22)

コメントをかく


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

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

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

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