プラグイン作成 FAQ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*プラグイン作成 FAQ [#ia027cab]
プラグイン作成についてのFAQです。
FAQの内容は、ユーザーの皆さまからいただいたお問い合わせと...
#Contents
----
**プラグインの作成について [#z3dcec55]
***プラグインはどうやって作成すればよいですか? [#w392bc64]
[[プラグインの作り方:https://rpgbakin.com/pukiwiki/?%E3%8...
***イベントエディターからC#プログラムを編集するときに起動...
slnファイルの関連付けをVisual Studio以外に設定することで...
----
**イベント関係 [#da58dbeb]
***「会話を表示」や「メッセージを表示」パネルに相当するメ...
「会話」は下記メソッドで可能です。 0 の部分は 1,2,3 など...
mapScene.ShowDialogue(msg, 0, MenuControllerBase.WindowT...
new AbstractRenderObject.GameContent.DialogueCharacterPr...
new AbstractRenderObject.GameContent.DialogueCharacterPr...
DialogueCharacterProperty() の引数に会話するキャラのグラ...
引数は概ねパネルで設定できる内容と連動しているかと思いま...
#br
「メッセージ」は下記メソッドです。会話と同じく第二引数の ...
mapScene.ShowMessage(stringAttr.value, 0, MenuController...
#br
また「テロップ」は下記メソッドとなります。
mapScene.ShowTelop(msg, 0, MenuControllerBase.WindowType...
#br
ShowDialogue, ShowMessage は戻り値にその場限りの id が返...
mapScene.IsQueuedDialogue(id) や
mapScene.IsQueuedMessage(id)
を実行すると、表示した会話やメッセージがまだ表示中(閉じ...
***会話メッセージやダイアログを閉じることはできますか? [...
Ver.1.10段階ではできません。
***「イメージとして画面に文字を表示する」パネルに相当する...
Graphics.DrawString (縁取りあり)や
Graphics.DrawStringSoloColor (縁取りなし)をご利用ください。
現時点(ver.1.9)では書式によるテキスト装飾に関するメソッ...
(書式によるテキスト装飾が必要な場合、SpriteManager の公...
***「レンダリング設定の変更」パネルに相当するメソッドはど...
下記をお使いください。
var render = catalog.getItemFromName<Yukar.Common.Rom.Re...
mapScene.mapDrawer.setRenderSettings(render);
***「イベントのモーションを変更」や「キャストのモーション...
下記の2つのどちらかをお使いください。
mapChr.playMotion("モーション名")
mapScene.hero.playMotion(("モーション名", 0.2f, true, lo...
※lockMotion = 歩きなどで解除されないようにするかどうか / ...
***「プレイヤーにブレンドシェイプを適用」に該当するメソッ...
キーを指定して適用する場合は下記をお使いください。
mapScene.hero.getModelInstance().setMorphBlend("キー名",...
クリップを指定して適用する場合は下記をお使いください。
引数はそれぞれ 適用対象、クリップ名、補間時間、他のブレン...
ScriptRunner.AddBlendShapeTask(mapScene.hero, "クリップ...
***モーションの終了を取得する方法はありますか? [#xeadccf3]
下記のサンプルコードをイベントにバインドしてご利用くださ...
[[MotionUtil.cs:https://rpgbakin.com/pukiwiki/?plugin=att...
GetMotionLoopCount でモーションのループ回数を取得します。
ワンショットの場合、1だったらモーション完了とみなす事がで...
PlayMotionImmediately でブレンドなしでモーション再生を開...
通常のモーション再生パネルではブレンドが邪魔という場合に...
***「コモンイベントの実行」をC#で取得する方法はありますか...
下記の方法で取得することができます。
// コモンイベントを名前から探す(GUIDがわかっている場合...
var guid = catalog.getGameSettings().commonEvents.FirstO...
if(guid != Guid.Empty)
{
// マップシーンからランナーを取得
var runner = mapScene.GetScriptRunner(guid);
// ランナーが取得できなかった(条件を満たしたシート...
if (runner == null)
return;
// 実行開始
bool result = runner.Run();
// バトル中に実行したい場合は、バトル処理のメインル...
var btlEvtCtl = mapScene as BattleEventControllerBase;
if (result && btlEvtCtl != null)
{
btlEvtCtl.start(guid);
}
}
***選択肢を表示している間は次のイベントパネルに進まずに止...
下記のように SetWaiter に Func<bool> を渡すことで、funcが...
[BakinFunction]
public void WaitFunc()
{
float elapsed = 0;
runner.SetWaiter(() => {
elapsed += GameMain.getElapsedTime();
return elapsed < 10; // 10秒経過するまで...
});
}
***プレイヤーやキャストの位置に吹き出しを表示させることは...
下記を毎フレーム呼び出しください。
mapScene.GetCharacterScreenPos(MapCharacter, out var x, ...
mapScene.menuWindow.AdjustBalloonRect(x, y - 32);
***文字列を表示するYukar.Engine.TextDrawer.DrawString()に...
colorはMicrosoft.Xna.Framework.Colorクラスを指定してくだ...
fontですが、サイズの指定が不要であれば、TextDrawerクラス...
Graphics.DrawString(0, "表示したい文字列", new Vector2(0...
サイズ指定が必要な場合は、SharpKmyGfx.Fontクラスのインス...
作成したSharpKmyGfx.Fontクラスのインスタンスは自前の処理...
***イベントパネル「イメージを表示」「イメージとして画面に...
下記となります。
// イメージを表示
int spIndex = 0; // イメージ番号
int sliceNo = 0; // 画像に分割指定がある場合、左上を0(横...
var guid = catalog.getItemFromName<Yukar.Common.Resource...
mapScene.spManager.ShowPicture(spIndex, guid, 100, 100, ...
// 座標をセットする
int x = 0; // 座標X
int y = 0; // 座標Y
mapScene.spManager.Move(spIndex, 0, x, y);
// イメージとして文字列を表示
int spIndex = 0; // イメージ番号
int x = 0; // 座標X
int y = 0; // 座標Y
mapScene.spManager.ShowText(spIndex, "表示したい文字列",...
***イベントパネル「プレイヤーの操作の許可/禁止」「プレイ...
それぞれ以下となります。
「プレイヤーの操作の許可/禁止」
許可
mapScene.playerLocked &= ~MapScene.PLAYER_LOCK_BY_EVENT;
禁止
mapScene.playerLocked |= MapScene.PLAYER_LOCK_BY_EVENT;
#br
「プレイヤーの向きの変更の禁止・許可」
禁止
mapScene.owner.data.start.fixDirectionPlayer = true;
mapScene.hero.dirMethod = MapCharacter.DirectionMethods...
許可
mapScene.owner.data.start.fixDirectionPlayer = false;
mapScene.hero.dirMethod = MapCharacter.DirectionMethods...
#br
「プレイヤーのダッシュの許可/禁止」
許可
mapScene.owner.data.system.dashAvailable = true;
禁止
mapScene.owner.data.system.dashAvailable = false;
#br
「ジャンプの許可/禁止」
許可
mapScene.owner.data.system.jumpAvailable = true;
禁止
mapScene.owner.data.system.jumpAvailable = false;
#br
「移動の許可/禁止」
許可
mapScene.owner.data.system.walkAvailable = true;
禁止
mapScene.owner.data.system.walkAvailable = true;
***イベントパネル「プレイヤーの落下を開始」「イベントの落...
機能としては公開しておりません。
剛体があるものに関しましては、以下のように設定して物理で...
(tgtはMapCharacterクラスのインスタンス)
var rgd = tgt.getRigidbody();
tgt.setGravity(speed);
tgt.fixHeight = false;
tgt.refreshRigidBodyMask();
rgd.activate(true);
rgd.setAngularDamping(0.5f);
rgd.setPositionDamping(0.5f);
剛体がないものに関しましては、自前でY位置を移動してくださ...
***イベントパネル「指定した時間待つ」に該当する方法はあり...
下記にて時間を測ってください。
[BakinFunction]
public void WaitFunc()
{
float elapsed = 0;
runner.SetWaiter(() => {
elapsed += GameMain.getElapsedTime();
return elapsed < 10; // 10秒経過するまで...
});
}
***イベントパネル「エフェクトの表示」「感情マークを表示」...
スクリーン座標に変換するためにどちらのパネルでも同じくMap...
***イベントパネル「イベント用フリーレイアウトの表示」の機...
現在表示中のフリーレイアウトは GameMain.instance.freeLayo...
まだ表示されていないものを新しく表示する場合、下記のよう...
// 開く場合
var lyt = catalog.getLayoutProperties().AllLayoutNodes.F...
if (lyt != null)
{
GameMain.instance.ShowFreeLayout(lyt.Guid);
}
***イベント接触時の当たり判定に関するメソッドはありますか...
明示的に当たり判定を行うメソッドはありません。
接触時の当たり判定については、mapChr.collisionStatus.hitC...
***イベントエディターの衝突設定「プレイヤーとぶつかる」「...
下記となります。
mapChr.collisionStatus.playerCollidable = true; // プレ...
mapChr.collisionStatus.eventCollidable = true; // イベン...
mapChr.fixPos = true; // 押して動かせる
これらへの変更を反映するには下記の呼び出しが必要です。
mapChr.refreshRigidBodyMask(); // collidableのみ変更した...
mapChr.refreshRigidBody(); // fixPosも変更した場合
***レイキャストのCollisionTypeで選択できる、「MAP_SLOPE」...
MAP_SLOPEは坂と階段をターゲットとしています。
「周囲の当たり判定の確認(レイキャスト)」での実行ですが...
(「地形」ではCollisionType.MAP とCollisionType.MAP_SLOPE...
ただし坂の高さが低いケースではヒットしません。
レイキャストの発射の高さを調整してみてください。
***レイキャスト機能を使用してキャストイベントにプレイヤー...
以下のような方法でできます。
var result = chr.getRigidbody().getPhysicsBase().rayCast(
Util.ToKmyVector(thisCastPos), // from
Util.ToKmyVector(playerPos), // to
(ushort)(CollisionType.PLAYER) , hit);
***強化アイテムをプラグインで強化する方法はありますか? [...
AdvancedEnhance()をご利用ください。
使用方法については下記のスクリプトを参考にしてください。
[[ItemEnhancementSampleScript_1.cs:https://rpgbakin.com/p...
***強化アイテム取得した際にアイテム取得時のイベントを走ら...
下記の手順でイベント実行付きで強化アイテムの入手を実行で...
[BakinFunction]
public void AddEnhancedItem()
{
var item = catalog.getItemFromName<Yukar.Com...
var enhancedItem = item.CreateEnhancedItem();
catalog.addEnhancedItem(enhancedItem);
GameMain.instance.data.party.SetItemNum(enha...
var ev = catalog.getItemFromGuid(item.script...
var runner = mapScene.mapEngine.AddEvent(map...
}
***同じアイテム名が複数あった場合にListなどの方法でまとめ...
下記を使うことで可能です。
var item = catalog.getItemFromName<Yukar.Common.Rom.NIte...
var enhancedItemList = GameMain.instance.data...
***マップ上に未配置のキャストイベントを生成することはでき...
catalogからcastを探して、そのeventRefを渡すようにしていた...
データベースで定義しているものは基本的にcatalogから探して...
GameMain.instance.pushTask(() =>
{
var cast = catalog.getItemFromName<Yukar....
targetEvent.CreateEvent(cast.eventRef,
targetEvent.getDirectionRadian());
return false;
});
***キャストイベントの「現在のHP」など、消費型ステータスの...
下記をご利用ください
// マップイベントは現状HPのみシステムからコントロールさ...
mapChr.battleStatus.HitPoint;
// マップバトルシステムからはアクセスしません...
mapChr.battleStatus.battleStatusData.consumpt...
// そのほかの通常ステータスの取得の場合
mapChr.battleStatus.battleStatusData.statusVa...
***イベントのグラフィックのモーション再生に関するYukar.En...
nameはモーション名、blendTimeはモーションのブレンド開始時...
isTemporaryでfalseを指定すると現在再生中のモーション名を...
このモーション名はwalk/run/jumpup/landing等のモーション名...
doMotionLockはモーションが一周するまでユーザー操作による...
定義の引数部分にある=の後ろ(=false等)は引数を省略した場...
void Yukar.Engine.MapCharacter.playMotion(
string name,
float blendTime = 0.2f,
bool isTemporary = false,
bool doLockMotion = false
)
***イベントが「話しかけられる状態(イベント開始条件が「話...
コモンイベントから取得する場合は下記のスクリプトを参考に...
[[Takable.txt:https://rpgbakin.com/pukiwiki/?plugin=attac...
通常のイベントから取得する場合は下記のようにメソッドを変...
[BakinFunction(Description = "このイベントに話しかけられ...
public int GetTalkableForThis()
{
// 現在選ばれているシートを取得
var scriptGuid = mapChr.getCurrentSheet()?.sc...
var script = catalog.getItemFromGuid(scriptGu...
// 成立しているシートなし
if (script == null)
return 0;
// 話しかけられるイベントでも、中身が空っぽだ...
if (script.commands.Count == 0)
return 0;
// 話しかけられる位置にいれば1を返す
if (mapScene.hero.collisionStatus.talkableChr...
return 1;
return 0;
}
***ヒットストップ表現を実装するために、キャストイベントの...
現時点(Ver.1.10)ではできません。
----
**リソース [#yda86c46]
***スタンプのサブグラフィックのオン・オフを切り替えること...
下記をお使いください。
mapChr.SetSubGraphicOpacity
***スタンプのサブグラフィックの「位置のみを適応」のオン・...
サブグラフィックの位置はmapChr.DisplayObjects 内に各表示...
下記を使って取得することはできます。
((Yukar.Common.Resource.GfxResourceBase)mapChr.getGrap...
#br
''変更については、リソースを直接書き換えることになります...
***スタンプのサブグラフィックの相対位置XYZ、相対角度XYZ、...
下記の pos, rot, scale がこれらの情報を管理しています。
((Yukar.Common.Resource.GfxResourceBase)mapChr.getGraphi...
#br
''変更については、リソースを直接書き換えることになります...
***スタンプのサブグラフィックのローカルライト連動の「利用...
下記の useLight でオン・オフの情報を管理しています。
((Yukar.Common.Resource.GfxResourceBase)mapChr.getGraphi...
#br
''変更については、リソースを直接書き換えることになります...
***サブグラフィックに設定できるローカルライトの色・強度・...
下記の手順で設定できます。
var index = 1; // 目的のサブグラフィック番号
foreach (var obj in mapChr.DisplayObjects)
{
if(obj.index == index && obj.instance is ...
{
lgt.setIntensity(強さ);
lgt.setColor(色);
lgt.setRadius(半径);
}
}
#br
''変更については、リソースを直接書き換えることになります...
***パターンアニメのモーションを指定して、2D描画することは...
下記の方法で可能です。
var spIndex = 10; // スプライト番号
var guid = new Guid("c15f94b6-d4a0-46c4-bc43-...
var zoom = 100;
var x = 640;
var y = 360;
mapScene.spManager.ShowPicture(spIndex, guid,...
Microsoft.Xna.Framework.Color.White, new ...
スライスアニメのGUIDはリソース画面で右クリック>GUIDをコ...
これは Graphics.drawImage と違って一度だけ実行すればその...
mapScene.spManager.Move で移動したり、 mapScene.spManager...
こちらはイベントパネル「イメージを表示」で使っているクラ...
----
**マップ関連 [#rec506a5]
***マップエディターのように、マップ上でオブジェクトにカー...
この機能はエディタ専用の描画パス(ピックアップバッファ)を...
***マップ設定パレット>基本タブ>「カメラ追従範囲」で設定...
下記をお使いください。
mapScene.map.mapCameraRange
if(mapScene.map.mapCameraRange == Rectangle.Empty) が tru...
***マップ設定パレット>レンダリング設定タブにある「背景」...
mapScene.mapDrawer.renderSettings.skyModel にモデルのGUIDを
mapScene.mapDrawer.renderSettings.reflection に環境マップ...
mapScene.mapDrawer.setRenderSettings(mapScene.mapDrawer.r...
***マップに配置したローカルライトの色・強度・半径を設定す...
下記のコードで変更できます。
var lgt = mapScene.mapDrawer.mapRom.localLights.FirstOrDe...
lgt.setIntensity(強さ);
lgt.setColor(色);
lgt.setRadius(半径);
***「マップ設定」の中の「レンダリング」にある「ライト」や...
mapScene.mapDrawer.renderSettingsから取得できます。
設定について、一部の項目はこの設定値を変更することで反映...
スカイボックス等のリソースのロードを伴う項目の変更は mapS...
----
**マップバトル [#x922c1f1]
***キャストの種別指定(味方・敵・両方・なし)を変更するコ...
下記のコードで mapChr のキャストタイプが取得可能です。
var type = mapChr.rom?.CastType ?? Yukar.Common.Rom.Cast...
[[キャストやイベント同士の当たり判定]]を参考に判断してみ...
***マップバトルの際に表示されるダメージ表示の色や大きさを...
下記のコードで可能です
var viewer = mapScene.fieldBattleViewer;
viewer.zoomedScale = 2.0f; // 出たばかりのタ...
viewer.damageScale = 1.0f; // 最終的なスケール
viewer.zoomTime = 0.1f; // 最終的なスケールに...
viewer.drawTime = 1.0f; // ダメージが消えるま...
viewer.damageColor = Microsoft.Xna.Framework....
viewer.criticalDamageColor = Microsoft.Xna.Fr...
viewer.criticalDamageColor = Microsoft.Xna.Fr...
また、下記に添付したようなスクリプトを使って、ご自身でダ...
[[ChangeFieldBattleViewer.cs:https://rpgbakin.com/pukiwik...
***マップバトルの際、クリティカルダメージを発生させる方法...
クリティカル率に基づいてランダムに判定を行っているため、...
状態変化を使って、一時的にクリティカル率を上昇・下降させ...
***マップバトルの際、ダメージを受けたキャストの色が変化し...
下記を使うことで取得はすることはできます。
mapChr.rom.InvincibleTime
''ただし、変更はデータベースを直接変更することになるため...
***マップバトル使用時に、ダメージを受けたキャストの色(デ...
MapCharacter.invalidDamageColor に定義があります。
----
**ゲーム定義 [#fde57f94]
***[[移動と操作]]の「標準操作」および「ラジコン操作」のON...
下記を使って切替できます。
GameMain.instance.data.start.controlMode = Yukar.Common....
GameMain.instance.data.start.controlMode = Yukar.Common....
***[[移動と操作]]の「話しかける判定スケール」を取得・変更...
スケール自体は、GameMain.instance.catalog.getGameSettings...
''ただし、変更はゲーム定義の値を直接編集することになりま...
''変更をするとテストプレイが完了しても値が保持されてしま...
***[[移動と操作]]の「カメラ操作を許可しない」のON/OFFを...
下記を使って取得・変更が可能です。
mapScene.mapFixCamera
また、各カメラ操作個別の許可・禁止については下記を使うこ...
owner.data.start.camLockX
owner.data.start.camLockY
owner.data.start.camLockZoom
owner.data.start.camLockReset
***[[移動と操作]]>カメラ距離自動調整の「地形」および「物...
下記で使ってそれぞれの状態を取得することができます。
catalog.getGameSettings().CameraAvoidObjects
catalog.getGameSettings().CameraAvoidTerrain
''ただし、変更はゲーム定義の値を直接編集することになりま...
***[[移動と操作]]の「自動的にプレイヤーの後ろに回り込む」...
下記を使って情報を取得することはできます。
GameMain.instance.catalog.getGameSettings().isTpsMode
''ただし、変更はゲーム定義の値を直接編集することになりま...
***[[移動と操作]]のキー・ボタン割り当てのゲームコントロー...
できません。ゲーム定義の設定をそのまま使ってください。
***[[移動と操作]]>移動(慣性)の「標準旋回速度」を変更す...
下記を使って速度を取得することはできます。
GameMain.instance.catalog.getGameSettings().DefaultRotat...
''ただし、変更はゲーム定義の値を直接編集することになりま...
***ゲーム定義>[[移動と操作]]>デバイス入力値の調整要素に...
できません。
代わりに Input.GetAxis() の値に応じてカメラを回転させる処...
***プロジェクト設定のバージョン 製作者などをタイトルに表...
下記を使って情報を取得することはできます。
catalog.getGameSettings().meta.buildVer
そのうえで下記のように変数に情報を格納すればレイアウト上...
GameMain.instance.data.system.SetVariable("変数名", cata...
ただし、デフォルトのタイトル画面上ではC#を動かすことはVer...
そのためゲーム定義でタイトル画面をスキップするようにし、...
***コンフィグ画面にある「自動ダッシュ」のON/OFFの判定を取...
サンプルコードを添付します。
[[ConfigGetter.cs:https://rpgbakin.com/pukiwiki/?plugin=a...
アサインした上でC#メソッド「GetAutoDash」を実行すれば取得...
***[[移動と操作]]の「操作」カテゴリーにおける「移動軸は横...
それぞれ下記となります。
「移動軸は横と奥行き」
mapScene.owner.catalog.getGameSettings().axisMode = Yuka...
「移動軸は横と高さ」
mapScene.owner.catalog.getGameSettings().axisMode = Yuka...
***[[ルールと描画]]の「ゲームシステムの定義」のアイテム袋...
ゲーム実行中にアイテム袋の最大値を変更する場合 GameMain.i...
この値はゲーム定義の方ではなくセーブデータに保存されます...
***システムリソースの「システム効果音の設定」にある決定や...
SEの変更は以下の手順で変更できます。
var sound = catalog.getItemFromName<Yukar.Common.Resourc...
Audio.UnloadSound(GameMain.instance.se.decide);
GameMain.instance.se.decide = Audio.LoadSound(sound);
ただしこれらはセーブデータへの保存対象ではないため、変更...
----
***「地形」と「プレイヤー」また「キャスト」との摩擦を設定...
下記をお使いください。
MapCharacter.getRigidBody().setFriction(摩擦値)
ただしMapCharacterで適宜摩擦をコントロールしているため、...
***プレイヤーおよびキャストの透明度を変更することはできま...
下記メソッドで可能です。
mapChr.setOpacityMultiplier(0.5f); // 透明度 0f で完全透明
***プレイヤーを透明化するために、mapScene.hero.setOpacity...
setOpacityMultiplier について、プレイヤーは状態変化による...
AfterDraw() で毎フレームセットしてみてください。
----
**レイアウト [#ga0ba69d]
***指定した名前のフリーレイアウトを開く/閉じるコードはあ...
下記のコードをご利用ください。
// 開く場合
var lyt = catalog.getLayoutProperties().AllLayoutNodes.F...
if (lyt != null)
{
GameMain.instance.ShowFreeLayout(lyt.Guid);
}
// 閉じる場合
var lyt = GameMain.instance.freeLayouts.FirstOrDefault(x...
if (lyt != null)
{
GameMain.instance.HideFreeLayout(lyt.LayoutGuid);
}
***指定した名前のフリーレイアウトの表示位置を設定する(特...
下記のように操作できますが、
positionAnchorTag への代入はレイアウトツールでの設定内容...
var lyt = GameMain.instance.freeLayouts.FirstOrDefault(x...
if (lyt != null)
{
var node = lyt.LayoutDrawer.ParseNodes().FirstOrDefa...
node.Position = new Microsoft.Xna.Framework.Vector2(...
node.MenuItem.positionAnchorTag = "特殊座標タグ書き...
}
***イベント用フリーレイアウトが表示されたかどうかを GameM...
GameMain.instance.freeLayouts.Countを見る場合は以下をお使...
// 全て非表示
GameMain.instance.HideALLFreeLayout(mapScene.isBattle);
// 選択したレイアウトのみ表示
GameMain.instance.ShowFreeLayout(layoutGuid, mapScene.is...
// 選択したレイアウトを追加して表示
GameMain.instance.AddFreeLayout(layoutGuid, mapScene.isB...
// 選択したレイアウトを非表示
GameMain.instance.HideFreeLayout(layoutGuid, mapScene.is...
***イベント用フリーレイアウトのRenderContainer>基本>表...
プラグインリファレンス:Yukar.Engine.RenderContainer クラ...
アニメーション不要な場合は ShowWithNotAnimation/HideWithN...
プラグインリファレンスにて"RenderContainer"で検索すると該...
https://rpgbakin.com/csreference/doc/ja/class_yukar_1_1_e...
***レイアウトの選択されたコンテナのコンテナ管理番号(イン...
下記の方法で現在表示中のレイアウトにアクセスできます。
[BakinFunction(Description = "選択されたサブコン...
public int GetIndex()
{
// まずメインメニューのマネージャを取得する
var lc = mapScene.menuWindow as LayoutMenuCon...
var lm = lc.mainMenu;
// メインメニューから派生して開かれているレイ...
// (アイテムセレクトから呼び出されているなら...
while (lm.NextlayoutManager != null)
lm = lm.NextlayoutManager;
// Drawerから現在選択中のインデックスを取得する
var drawer = lm.LayoutDrawer;
GameMain.PushLog(DebugDialog.LogEntry.LogType...
return drawer.GetSelectIndex();
}
さらに、インデックスを取得したあと、メインメニューを強制...
下記のような方法が使えます。
[BakinFunction]
public void CloseMainMenu()
{
// まずメインメニューのマネージャを取得する
var lc = mapScene.menuWindow as LayoutMenuCon...
var lm = lc.mainMenu;
lm.HideAll();
}
ちなみに、フリーレイアウトから現在選択中のインデックスを...
[BakinFunction]
public int GetIndexForFreeLayout()
{
// まずフリーレイアウトのマネージャを取得する
var lm = GameMain.instance.freeLayouts.FirstO...
if (lm == null)
{
GameMain.PushLog(DebugDialog.LogEntry.Log...
return -1;
}
// Drawerから現在選択中のインデックスを取得する
var drawer = lm.LayoutDrawer;
GameMain.PushLog(DebugDialog.LogEntry.LogType...
return drawer.GetSelectIndex();
}
***プラグインを使ってレイアウトをキャンセルボタンで閉じな...
キャンセルを禁止するには下記の方法が利用できます。
Update() 内に記述するなどしてお試しください。
var menu = mapScene.menuWindow as LayoutMenuController;
var lyt = menu.mainMenu;
while (lyt.NextlayoutManager != null)
lyt = lyt.NextlayoutManager;
if (lyt.LayoutNode.Name == "SkillSelect") // SkillSel...
{
// 基本はロック解除の状態にする
if (lyt.IsLocked())
lyt.UnLock();
// キャンセル禁止
if (Input.KeyTest(Input.StateType.TRIGGER, Input....
lyt.Lock();
}
***イベント用フリーレイアウトの表示位置を制御にはどうした...
まず以下のようにdefaultPositionにも値を設定する必要があり...
(defaultPositionにアクセスするためキャストも必要)
var node = lyt.LayoutDrawer.ParseNodes().FirstOrDefault...
node.Position = node.defaultPosition = node.MenuItem.po...
アニメに使用するスプライトが切り替わる時にレイアウトデー...
現在初回のみにSetLayoutPosition()にて位置を設定しておりま...
----
**データベース [#lc2957df]
***キャストのデータベースに記入してある管理タグ+メモの文...
tags というフィールドがそうです。
下記にてアクセスできます。
catalog.getItemFromName<Yukar.Common.Rom.Cast>("Hero").t...
***キャストが習得するスキルの一覧を取得することはできます...
キャストが習得するスキルは Cast.availableSkills に入って...
var learnSkills = catalog.getItemFromName<Yukar.Common.R...
スキルはGUIDの形で格納しているので、下記のように更にCatal...
if (learnSkills.Count > 0)
{
var skill = catalog.getItemFromGuid(learnSkills[0].s...
GameMain.PushLog(DebugDialog.LogEntry.LogType.EVENT,...
}
全スキルの一覧は下記の方法で取得することができます。
var allSkills = catalog.getFilteredItemList<Y...
***コモンイベントから現在バトル中の敵キャストの所持金やド...
下記の方法で先頭のモンスターの経験値を取得できます。
BattleSequenceManagerBase.Get().EnemyViewDataList[0].mon...
また、下記の方法で先頭のモンスターの1つ目のドロップアイテ...
var guid = BattleSequenceManagerBase.Get().EnemyViewData...
var name = catalog.getItemFromGuid(guid)?.name;
実際に利用する際は、 EnemyViewDataList や dropItems の Co...
**サウンド [#j1ecc16a]
***効果音を再生するコードはありますか? [#jc656827]
下記のようにcatalogからromを取得してください。
var rom = catalog.getItemFromGuid(guid) as Yukar.Common....
Audio.LoadSound(rom);
***BGMをクロスフェードさせることはできますか? [#sc2b77d2]
システムとしてのBGMは再生ラインを一つしか持っていないため...
まず下記の方法で、効果音として音量ゼロで再生開始(この場...
var id = Audio.LoadSound(guid);
Audio.PlaySound(id, 0, 0, 1);
その後下記を使って、毎フレームボリュームを操作し、前のBGM...
Audio.SetSEVolume(id, volume);
----
**そのほか [#i83a30a8]
***バトル中にバトルカメラを切り替えることはできますか? [...
下記のコードで変更できます。
GameMain.instance.data.system.currentBattleCa...
カメラ切り替わりのタイミングで反映されますが、即時反映し...
mapScene.applyCameraToBattle();
ただし、こちらはバトルイベントにアサインしたC#からしか効...
***特定の画像を表示させたい場合、Graphics.DrawImageの引数...
Start() 内などでまず下記のようなコードを使ってテクスチャ...
tex = catalog.getItemFromName<Yukar.Common.Re...
Graphics.LoadImage(tex);
その後、描画したい場面で(Update, AfterDrawなどのタイミン...
Graphics.DrawImage(tex, x, y);
使用後、下記のようにイベント破棄時に使用した画像を解放し...
public override void Destroy()
{
Graphics.UnloadImage(tex);
}
***イベント生成mapChr.CreateEvent()は使用可能でしょうか?...
使用可能です。
mapChr.CreateEvent(guid, dir); のように使えます。
dir は発射元と同じ方向を向かせたい場合、 mapChr.getDirect...
guidはキャストのGUIDです。
catalog.getItemFromName("取得したいキャストの名前").guId ...
GUIDは一度キャストを作ったら変化しません。ですので、ログ...
***GameMainクラスにあるgetRelativeParam60FPS関数は、どう...
getRelativeParam60FPS は直前のフレームからの経過時間を60F...
つまりこのメソッドは1フレームにかかった時間(60FPSであれば...
#br
C#スクリプトの Update() 内でframeCount++; とすると frameC...
しかしこの方法だと、処理落ちが発生していたり、リフレッシ...
そこで、frameCount++ のかわりに frameCount += getRelative...
Update 1回につきかかった時間が 1/60 秒でなかった場合にも...
***マウスの位置に対してのマップ上(3D空間上)の座標を求める...
Util.UnProject2World()は画面上のXY座標を3D空間上の座標時...
現在のカメラの射影行列とビュー行列を渡します。
基本的には mapScene.CurrentPP, mapScene.CurrentVV を指定...
***Input.KeyTest()にてKeyStateにTOUCHを指定した場合、Stat...
Input.KeyTest()はゲーム中の入力デバイスの状態を取得するメ...
タッチ動作のシミュレーションが目的のためそのような値を返...
加工なしの値が欲しい場合は、GameStateをWALKではなくSYSTEM...
***プレイヤーのジャンプ中の位置を変更する方法(ジャンプ操...
setPositiionを使うとはvelocityのリセットがかかってしまう...
***カメラツールのフレームのプロパティ「光源設定>DOF焦点...
C#スクリプトから変更の場合、以下になります。
カメラ
mapScene.CameraManager.ntpCamera
キーフレーム
getKeyFrame()
DOF
Yukar.Common.Rom.Camera.KeyFrame.dof
X=焦点係数, Y=焦点範囲係数, Z=ぼかし半径
C#スクリプトで値を変更した場合、カメラツールで設定してい...
***セーブデータの保存スロットの番号(0-)の取得方法を教えて...
var indexに保存スロットの番号を取得しています。
[BakinFunction(Description = "説明文 / Description")]
public void Func()
{
var lc = mapScene.GetMenuController();
var lm = lc.mainMenu;
var index = lm.SelectProp.SelectSaveIndex;
}
var lm = lc.mainMenuはメインメニューから保存した場合にな...
イベントから「セーブ画面を表示」で保存した場合は、lm = lc...
終了行:
*プラグイン作成 FAQ [#ia027cab]
プラグイン作成についてのFAQです。
FAQの内容は、ユーザーの皆さまからいただいたお問い合わせと...
#Contents
----
**プラグインの作成について [#z3dcec55]
***プラグインはどうやって作成すればよいですか? [#w392bc64]
[[プラグインの作り方:https://rpgbakin.com/pukiwiki/?%E3%8...
***イベントエディターからC#プログラムを編集するときに起動...
slnファイルの関連付けをVisual Studio以外に設定することで...
----
**イベント関係 [#da58dbeb]
***「会話を表示」や「メッセージを表示」パネルに相当するメ...
「会話」は下記メソッドで可能です。 0 の部分は 1,2,3 など...
mapScene.ShowDialogue(msg, 0, MenuControllerBase.WindowT...
new AbstractRenderObject.GameContent.DialogueCharacterPr...
new AbstractRenderObject.GameContent.DialogueCharacterPr...
DialogueCharacterProperty() の引数に会話するキャラのグラ...
引数は概ねパネルで設定できる内容と連動しているかと思いま...
#br
「メッセージ」は下記メソッドです。会話と同じく第二引数の ...
mapScene.ShowMessage(stringAttr.value, 0, MenuController...
#br
また「テロップ」は下記メソッドとなります。
mapScene.ShowTelop(msg, 0, MenuControllerBase.WindowType...
#br
ShowDialogue, ShowMessage は戻り値にその場限りの id が返...
mapScene.IsQueuedDialogue(id) や
mapScene.IsQueuedMessage(id)
を実行すると、表示した会話やメッセージがまだ表示中(閉じ...
***会話メッセージやダイアログを閉じることはできますか? [...
Ver.1.10段階ではできません。
***「イメージとして画面に文字を表示する」パネルに相当する...
Graphics.DrawString (縁取りあり)や
Graphics.DrawStringSoloColor (縁取りなし)をご利用ください。
現時点(ver.1.9)では書式によるテキスト装飾に関するメソッ...
(書式によるテキスト装飾が必要な場合、SpriteManager の公...
***「レンダリング設定の変更」パネルに相当するメソッドはど...
下記をお使いください。
var render = catalog.getItemFromName<Yukar.Common.Rom.Re...
mapScene.mapDrawer.setRenderSettings(render);
***「イベントのモーションを変更」や「キャストのモーション...
下記の2つのどちらかをお使いください。
mapChr.playMotion("モーション名")
mapScene.hero.playMotion(("モーション名", 0.2f, true, lo...
※lockMotion = 歩きなどで解除されないようにするかどうか / ...
***「プレイヤーにブレンドシェイプを適用」に該当するメソッ...
キーを指定して適用する場合は下記をお使いください。
mapScene.hero.getModelInstance().setMorphBlend("キー名",...
クリップを指定して適用する場合は下記をお使いください。
引数はそれぞれ 適用対象、クリップ名、補間時間、他のブレン...
ScriptRunner.AddBlendShapeTask(mapScene.hero, "クリップ...
***モーションの終了を取得する方法はありますか? [#xeadccf3]
下記のサンプルコードをイベントにバインドしてご利用くださ...
[[MotionUtil.cs:https://rpgbakin.com/pukiwiki/?plugin=att...
GetMotionLoopCount でモーションのループ回数を取得します。
ワンショットの場合、1だったらモーション完了とみなす事がで...
PlayMotionImmediately でブレンドなしでモーション再生を開...
通常のモーション再生パネルではブレンドが邪魔という場合に...
***「コモンイベントの実行」をC#で取得する方法はありますか...
下記の方法で取得することができます。
// コモンイベントを名前から探す(GUIDがわかっている場合...
var guid = catalog.getGameSettings().commonEvents.FirstO...
if(guid != Guid.Empty)
{
// マップシーンからランナーを取得
var runner = mapScene.GetScriptRunner(guid);
// ランナーが取得できなかった(条件を満たしたシート...
if (runner == null)
return;
// 実行開始
bool result = runner.Run();
// バトル中に実行したい場合は、バトル処理のメインル...
var btlEvtCtl = mapScene as BattleEventControllerBase;
if (result && btlEvtCtl != null)
{
btlEvtCtl.start(guid);
}
}
***選択肢を表示している間は次のイベントパネルに進まずに止...
下記のように SetWaiter に Func<bool> を渡すことで、funcが...
[BakinFunction]
public void WaitFunc()
{
float elapsed = 0;
runner.SetWaiter(() => {
elapsed += GameMain.getElapsedTime();
return elapsed < 10; // 10秒経過するまで...
});
}
***プレイヤーやキャストの位置に吹き出しを表示させることは...
下記を毎フレーム呼び出しください。
mapScene.GetCharacterScreenPos(MapCharacter, out var x, ...
mapScene.menuWindow.AdjustBalloonRect(x, y - 32);
***文字列を表示するYukar.Engine.TextDrawer.DrawString()に...
colorはMicrosoft.Xna.Framework.Colorクラスを指定してくだ...
fontですが、サイズの指定が不要であれば、TextDrawerクラス...
Graphics.DrawString(0, "表示したい文字列", new Vector2(0...
サイズ指定が必要な場合は、SharpKmyGfx.Fontクラスのインス...
作成したSharpKmyGfx.Fontクラスのインスタンスは自前の処理...
***イベントパネル「イメージを表示」「イメージとして画面に...
下記となります。
// イメージを表示
int spIndex = 0; // イメージ番号
int sliceNo = 0; // 画像に分割指定がある場合、左上を0(横...
var guid = catalog.getItemFromName<Yukar.Common.Resource...
mapScene.spManager.ShowPicture(spIndex, guid, 100, 100, ...
// 座標をセットする
int x = 0; // 座標X
int y = 0; // 座標Y
mapScene.spManager.Move(spIndex, 0, x, y);
// イメージとして文字列を表示
int spIndex = 0; // イメージ番号
int x = 0; // 座標X
int y = 0; // 座標Y
mapScene.spManager.ShowText(spIndex, "表示したい文字列",...
***イベントパネル「プレイヤーの操作の許可/禁止」「プレイ...
それぞれ以下となります。
「プレイヤーの操作の許可/禁止」
許可
mapScene.playerLocked &= ~MapScene.PLAYER_LOCK_BY_EVENT;
禁止
mapScene.playerLocked |= MapScene.PLAYER_LOCK_BY_EVENT;
#br
「プレイヤーの向きの変更の禁止・許可」
禁止
mapScene.owner.data.start.fixDirectionPlayer = true;
mapScene.hero.dirMethod = MapCharacter.DirectionMethods...
許可
mapScene.owner.data.start.fixDirectionPlayer = false;
mapScene.hero.dirMethod = MapCharacter.DirectionMethods...
#br
「プレイヤーのダッシュの許可/禁止」
許可
mapScene.owner.data.system.dashAvailable = true;
禁止
mapScene.owner.data.system.dashAvailable = false;
#br
「ジャンプの許可/禁止」
許可
mapScene.owner.data.system.jumpAvailable = true;
禁止
mapScene.owner.data.system.jumpAvailable = false;
#br
「移動の許可/禁止」
許可
mapScene.owner.data.system.walkAvailable = true;
禁止
mapScene.owner.data.system.walkAvailable = true;
***イベントパネル「プレイヤーの落下を開始」「イベントの落...
機能としては公開しておりません。
剛体があるものに関しましては、以下のように設定して物理で...
(tgtはMapCharacterクラスのインスタンス)
var rgd = tgt.getRigidbody();
tgt.setGravity(speed);
tgt.fixHeight = false;
tgt.refreshRigidBodyMask();
rgd.activate(true);
rgd.setAngularDamping(0.5f);
rgd.setPositionDamping(0.5f);
剛体がないものに関しましては、自前でY位置を移動してくださ...
***イベントパネル「指定した時間待つ」に該当する方法はあり...
下記にて時間を測ってください。
[BakinFunction]
public void WaitFunc()
{
float elapsed = 0;
runner.SetWaiter(() => {
elapsed += GameMain.getElapsedTime();
return elapsed < 10; // 10秒経過するまで...
});
}
***イベントパネル「エフェクトの表示」「感情マークを表示」...
スクリーン座標に変換するためにどちらのパネルでも同じくMap...
***イベントパネル「イベント用フリーレイアウトの表示」の機...
現在表示中のフリーレイアウトは GameMain.instance.freeLayo...
まだ表示されていないものを新しく表示する場合、下記のよう...
// 開く場合
var lyt = catalog.getLayoutProperties().AllLayoutNodes.F...
if (lyt != null)
{
GameMain.instance.ShowFreeLayout(lyt.Guid);
}
***イベント接触時の当たり判定に関するメソッドはありますか...
明示的に当たり判定を行うメソッドはありません。
接触時の当たり判定については、mapChr.collisionStatus.hitC...
***イベントエディターの衝突設定「プレイヤーとぶつかる」「...
下記となります。
mapChr.collisionStatus.playerCollidable = true; // プレ...
mapChr.collisionStatus.eventCollidable = true; // イベン...
mapChr.fixPos = true; // 押して動かせる
これらへの変更を反映するには下記の呼び出しが必要です。
mapChr.refreshRigidBodyMask(); // collidableのみ変更した...
mapChr.refreshRigidBody(); // fixPosも変更した場合
***レイキャストのCollisionTypeで選択できる、「MAP_SLOPE」...
MAP_SLOPEは坂と階段をターゲットとしています。
「周囲の当たり判定の確認(レイキャスト)」での実行ですが...
(「地形」ではCollisionType.MAP とCollisionType.MAP_SLOPE...
ただし坂の高さが低いケースではヒットしません。
レイキャストの発射の高さを調整してみてください。
***レイキャスト機能を使用してキャストイベントにプレイヤー...
以下のような方法でできます。
var result = chr.getRigidbody().getPhysicsBase().rayCast(
Util.ToKmyVector(thisCastPos), // from
Util.ToKmyVector(playerPos), // to
(ushort)(CollisionType.PLAYER) , hit);
***強化アイテムをプラグインで強化する方法はありますか? [...
AdvancedEnhance()をご利用ください。
使用方法については下記のスクリプトを参考にしてください。
[[ItemEnhancementSampleScript_1.cs:https://rpgbakin.com/p...
***強化アイテム取得した際にアイテム取得時のイベントを走ら...
下記の手順でイベント実行付きで強化アイテムの入手を実行で...
[BakinFunction]
public void AddEnhancedItem()
{
var item = catalog.getItemFromName<Yukar.Com...
var enhancedItem = item.CreateEnhancedItem();
catalog.addEnhancedItem(enhancedItem);
GameMain.instance.data.party.SetItemNum(enha...
var ev = catalog.getItemFromGuid(item.script...
var runner = mapScene.mapEngine.AddEvent(map...
}
***同じアイテム名が複数あった場合にListなどの方法でまとめ...
下記を使うことで可能です。
var item = catalog.getItemFromName<Yukar.Common.Rom.NIte...
var enhancedItemList = GameMain.instance.data...
***マップ上に未配置のキャストイベントを生成することはでき...
catalogからcastを探して、そのeventRefを渡すようにしていた...
データベースで定義しているものは基本的にcatalogから探して...
GameMain.instance.pushTask(() =>
{
var cast = catalog.getItemFromName<Yukar....
targetEvent.CreateEvent(cast.eventRef,
targetEvent.getDirectionRadian());
return false;
});
***キャストイベントの「現在のHP」など、消費型ステータスの...
下記をご利用ください
// マップイベントは現状HPのみシステムからコントロールさ...
mapChr.battleStatus.HitPoint;
// マップバトルシステムからはアクセスしません...
mapChr.battleStatus.battleStatusData.consumpt...
// そのほかの通常ステータスの取得の場合
mapChr.battleStatus.battleStatusData.statusVa...
***イベントのグラフィックのモーション再生に関するYukar.En...
nameはモーション名、blendTimeはモーションのブレンド開始時...
isTemporaryでfalseを指定すると現在再生中のモーション名を...
このモーション名はwalk/run/jumpup/landing等のモーション名...
doMotionLockはモーションが一周するまでユーザー操作による...
定義の引数部分にある=の後ろ(=false等)は引数を省略した場...
void Yukar.Engine.MapCharacter.playMotion(
string name,
float blendTime = 0.2f,
bool isTemporary = false,
bool doLockMotion = false
)
***イベントが「話しかけられる状態(イベント開始条件が「話...
コモンイベントから取得する場合は下記のスクリプトを参考に...
[[Takable.txt:https://rpgbakin.com/pukiwiki/?plugin=attac...
通常のイベントから取得する場合は下記のようにメソッドを変...
[BakinFunction(Description = "このイベントに話しかけられ...
public int GetTalkableForThis()
{
// 現在選ばれているシートを取得
var scriptGuid = mapChr.getCurrentSheet()?.sc...
var script = catalog.getItemFromGuid(scriptGu...
// 成立しているシートなし
if (script == null)
return 0;
// 話しかけられるイベントでも、中身が空っぽだ...
if (script.commands.Count == 0)
return 0;
// 話しかけられる位置にいれば1を返す
if (mapScene.hero.collisionStatus.talkableChr...
return 1;
return 0;
}
***ヒットストップ表現を実装するために、キャストイベントの...
現時点(Ver.1.10)ではできません。
----
**リソース [#yda86c46]
***スタンプのサブグラフィックのオン・オフを切り替えること...
下記をお使いください。
mapChr.SetSubGraphicOpacity
***スタンプのサブグラフィックの「位置のみを適応」のオン・...
サブグラフィックの位置はmapChr.DisplayObjects 内に各表示...
下記を使って取得することはできます。
((Yukar.Common.Resource.GfxResourceBase)mapChr.getGrap...
#br
''変更については、リソースを直接書き換えることになります...
***スタンプのサブグラフィックの相対位置XYZ、相対角度XYZ、...
下記の pos, rot, scale がこれらの情報を管理しています。
((Yukar.Common.Resource.GfxResourceBase)mapChr.getGraphi...
#br
''変更については、リソースを直接書き換えることになります...
***スタンプのサブグラフィックのローカルライト連動の「利用...
下記の useLight でオン・オフの情報を管理しています。
((Yukar.Common.Resource.GfxResourceBase)mapChr.getGraphi...
#br
''変更については、リソースを直接書き換えることになります...
***サブグラフィックに設定できるローカルライトの色・強度・...
下記の手順で設定できます。
var index = 1; // 目的のサブグラフィック番号
foreach (var obj in mapChr.DisplayObjects)
{
if(obj.index == index && obj.instance is ...
{
lgt.setIntensity(強さ);
lgt.setColor(色);
lgt.setRadius(半径);
}
}
#br
''変更については、リソースを直接書き換えることになります...
***パターンアニメのモーションを指定して、2D描画することは...
下記の方法で可能です。
var spIndex = 10; // スプライト番号
var guid = new Guid("c15f94b6-d4a0-46c4-bc43-...
var zoom = 100;
var x = 640;
var y = 360;
mapScene.spManager.ShowPicture(spIndex, guid,...
Microsoft.Xna.Framework.Color.White, new ...
スライスアニメのGUIDはリソース画面で右クリック>GUIDをコ...
これは Graphics.drawImage と違って一度だけ実行すればその...
mapScene.spManager.Move で移動したり、 mapScene.spManager...
こちらはイベントパネル「イメージを表示」で使っているクラ...
----
**マップ関連 [#rec506a5]
***マップエディターのように、マップ上でオブジェクトにカー...
この機能はエディタ専用の描画パス(ピックアップバッファ)を...
***マップ設定パレット>基本タブ>「カメラ追従範囲」で設定...
下記をお使いください。
mapScene.map.mapCameraRange
if(mapScene.map.mapCameraRange == Rectangle.Empty) が tru...
***マップ設定パレット>レンダリング設定タブにある「背景」...
mapScene.mapDrawer.renderSettings.skyModel にモデルのGUIDを
mapScene.mapDrawer.renderSettings.reflection に環境マップ...
mapScene.mapDrawer.setRenderSettings(mapScene.mapDrawer.r...
***マップに配置したローカルライトの色・強度・半径を設定す...
下記のコードで変更できます。
var lgt = mapScene.mapDrawer.mapRom.localLights.FirstOrDe...
lgt.setIntensity(強さ);
lgt.setColor(色);
lgt.setRadius(半径);
***「マップ設定」の中の「レンダリング」にある「ライト」や...
mapScene.mapDrawer.renderSettingsから取得できます。
設定について、一部の項目はこの設定値を変更することで反映...
スカイボックス等のリソースのロードを伴う項目の変更は mapS...
----
**マップバトル [#x922c1f1]
***キャストの種別指定(味方・敵・両方・なし)を変更するコ...
下記のコードで mapChr のキャストタイプが取得可能です。
var type = mapChr.rom?.CastType ?? Yukar.Common.Rom.Cast...
[[キャストやイベント同士の当たり判定]]を参考に判断してみ...
***マップバトルの際に表示されるダメージ表示の色や大きさを...
下記のコードで可能です
var viewer = mapScene.fieldBattleViewer;
viewer.zoomedScale = 2.0f; // 出たばかりのタ...
viewer.damageScale = 1.0f; // 最終的なスケール
viewer.zoomTime = 0.1f; // 最終的なスケールに...
viewer.drawTime = 1.0f; // ダメージが消えるま...
viewer.damageColor = Microsoft.Xna.Framework....
viewer.criticalDamageColor = Microsoft.Xna.Fr...
viewer.criticalDamageColor = Microsoft.Xna.Fr...
また、下記に添付したようなスクリプトを使って、ご自身でダ...
[[ChangeFieldBattleViewer.cs:https://rpgbakin.com/pukiwik...
***マップバトルの際、クリティカルダメージを発生させる方法...
クリティカル率に基づいてランダムに判定を行っているため、...
状態変化を使って、一時的にクリティカル率を上昇・下降させ...
***マップバトルの際、ダメージを受けたキャストの色が変化し...
下記を使うことで取得はすることはできます。
mapChr.rom.InvincibleTime
''ただし、変更はデータベースを直接変更することになるため...
***マップバトル使用時に、ダメージを受けたキャストの色(デ...
MapCharacter.invalidDamageColor に定義があります。
----
**ゲーム定義 [#fde57f94]
***[[移動と操作]]の「標準操作」および「ラジコン操作」のON...
下記を使って切替できます。
GameMain.instance.data.start.controlMode = Yukar.Common....
GameMain.instance.data.start.controlMode = Yukar.Common....
***[[移動と操作]]の「話しかける判定スケール」を取得・変更...
スケール自体は、GameMain.instance.catalog.getGameSettings...
''ただし、変更はゲーム定義の値を直接編集することになりま...
''変更をするとテストプレイが完了しても値が保持されてしま...
***[[移動と操作]]の「カメラ操作を許可しない」のON/OFFを...
下記を使って取得・変更が可能です。
mapScene.mapFixCamera
また、各カメラ操作個別の許可・禁止については下記を使うこ...
owner.data.start.camLockX
owner.data.start.camLockY
owner.data.start.camLockZoom
owner.data.start.camLockReset
***[[移動と操作]]>カメラ距離自動調整の「地形」および「物...
下記で使ってそれぞれの状態を取得することができます。
catalog.getGameSettings().CameraAvoidObjects
catalog.getGameSettings().CameraAvoidTerrain
''ただし、変更はゲーム定義の値を直接編集することになりま...
***[[移動と操作]]の「自動的にプレイヤーの後ろに回り込む」...
下記を使って情報を取得することはできます。
GameMain.instance.catalog.getGameSettings().isTpsMode
''ただし、変更はゲーム定義の値を直接編集することになりま...
***[[移動と操作]]のキー・ボタン割り当てのゲームコントロー...
できません。ゲーム定義の設定をそのまま使ってください。
***[[移動と操作]]>移動(慣性)の「標準旋回速度」を変更す...
下記を使って速度を取得することはできます。
GameMain.instance.catalog.getGameSettings().DefaultRotat...
''ただし、変更はゲーム定義の値を直接編集することになりま...
***ゲーム定義>[[移動と操作]]>デバイス入力値の調整要素に...
できません。
代わりに Input.GetAxis() の値に応じてカメラを回転させる処...
***プロジェクト設定のバージョン 製作者などをタイトルに表...
下記を使って情報を取得することはできます。
catalog.getGameSettings().meta.buildVer
そのうえで下記のように変数に情報を格納すればレイアウト上...
GameMain.instance.data.system.SetVariable("変数名", cata...
ただし、デフォルトのタイトル画面上ではC#を動かすことはVer...
そのためゲーム定義でタイトル画面をスキップするようにし、...
***コンフィグ画面にある「自動ダッシュ」のON/OFFの判定を取...
サンプルコードを添付します。
[[ConfigGetter.cs:https://rpgbakin.com/pukiwiki/?plugin=a...
アサインした上でC#メソッド「GetAutoDash」を実行すれば取得...
***[[移動と操作]]の「操作」カテゴリーにおける「移動軸は横...
それぞれ下記となります。
「移動軸は横と奥行き」
mapScene.owner.catalog.getGameSettings().axisMode = Yuka...
「移動軸は横と高さ」
mapScene.owner.catalog.getGameSettings().axisMode = Yuka...
***[[ルールと描画]]の「ゲームシステムの定義」のアイテム袋...
ゲーム実行中にアイテム袋の最大値を変更する場合 GameMain.i...
この値はゲーム定義の方ではなくセーブデータに保存されます...
***システムリソースの「システム効果音の設定」にある決定や...
SEの変更は以下の手順で変更できます。
var sound = catalog.getItemFromName<Yukar.Common.Resourc...
Audio.UnloadSound(GameMain.instance.se.decide);
GameMain.instance.se.decide = Audio.LoadSound(sound);
ただしこれらはセーブデータへの保存対象ではないため、変更...
----
***「地形」と「プレイヤー」また「キャスト」との摩擦を設定...
下記をお使いください。
MapCharacter.getRigidBody().setFriction(摩擦値)
ただしMapCharacterで適宜摩擦をコントロールしているため、...
***プレイヤーおよびキャストの透明度を変更することはできま...
下記メソッドで可能です。
mapChr.setOpacityMultiplier(0.5f); // 透明度 0f で完全透明
***プレイヤーを透明化するために、mapScene.hero.setOpacity...
setOpacityMultiplier について、プレイヤーは状態変化による...
AfterDraw() で毎フレームセットしてみてください。
----
**レイアウト [#ga0ba69d]
***指定した名前のフリーレイアウトを開く/閉じるコードはあ...
下記のコードをご利用ください。
// 開く場合
var lyt = catalog.getLayoutProperties().AllLayoutNodes.F...
if (lyt != null)
{
GameMain.instance.ShowFreeLayout(lyt.Guid);
}
// 閉じる場合
var lyt = GameMain.instance.freeLayouts.FirstOrDefault(x...
if (lyt != null)
{
GameMain.instance.HideFreeLayout(lyt.LayoutGuid);
}
***指定した名前のフリーレイアウトの表示位置を設定する(特...
下記のように操作できますが、
positionAnchorTag への代入はレイアウトツールでの設定内容...
var lyt = GameMain.instance.freeLayouts.FirstOrDefault(x...
if (lyt != null)
{
var node = lyt.LayoutDrawer.ParseNodes().FirstOrDefa...
node.Position = new Microsoft.Xna.Framework.Vector2(...
node.MenuItem.positionAnchorTag = "特殊座標タグ書き...
}
***イベント用フリーレイアウトが表示されたかどうかを GameM...
GameMain.instance.freeLayouts.Countを見る場合は以下をお使...
// 全て非表示
GameMain.instance.HideALLFreeLayout(mapScene.isBattle);
// 選択したレイアウトのみ表示
GameMain.instance.ShowFreeLayout(layoutGuid, mapScene.is...
// 選択したレイアウトを追加して表示
GameMain.instance.AddFreeLayout(layoutGuid, mapScene.isB...
// 選択したレイアウトを非表示
GameMain.instance.HideFreeLayout(layoutGuid, mapScene.is...
***イベント用フリーレイアウトのRenderContainer>基本>表...
プラグインリファレンス:Yukar.Engine.RenderContainer クラ...
アニメーション不要な場合は ShowWithNotAnimation/HideWithN...
プラグインリファレンスにて"RenderContainer"で検索すると該...
https://rpgbakin.com/csreference/doc/ja/class_yukar_1_1_e...
***レイアウトの選択されたコンテナのコンテナ管理番号(イン...
下記の方法で現在表示中のレイアウトにアクセスできます。
[BakinFunction(Description = "選択されたサブコン...
public int GetIndex()
{
// まずメインメニューのマネージャを取得する
var lc = mapScene.menuWindow as LayoutMenuCon...
var lm = lc.mainMenu;
// メインメニューから派生して開かれているレイ...
// (アイテムセレクトから呼び出されているなら...
while (lm.NextlayoutManager != null)
lm = lm.NextlayoutManager;
// Drawerから現在選択中のインデックスを取得する
var drawer = lm.LayoutDrawer;
GameMain.PushLog(DebugDialog.LogEntry.LogType...
return drawer.GetSelectIndex();
}
さらに、インデックスを取得したあと、メインメニューを強制...
下記のような方法が使えます。
[BakinFunction]
public void CloseMainMenu()
{
// まずメインメニューのマネージャを取得する
var lc = mapScene.menuWindow as LayoutMenuCon...
var lm = lc.mainMenu;
lm.HideAll();
}
ちなみに、フリーレイアウトから現在選択中のインデックスを...
[BakinFunction]
public int GetIndexForFreeLayout()
{
// まずフリーレイアウトのマネージャを取得する
var lm = GameMain.instance.freeLayouts.FirstO...
if (lm == null)
{
GameMain.PushLog(DebugDialog.LogEntry.Log...
return -1;
}
// Drawerから現在選択中のインデックスを取得する
var drawer = lm.LayoutDrawer;
GameMain.PushLog(DebugDialog.LogEntry.LogType...
return drawer.GetSelectIndex();
}
***プラグインを使ってレイアウトをキャンセルボタンで閉じな...
キャンセルを禁止するには下記の方法が利用できます。
Update() 内に記述するなどしてお試しください。
var menu = mapScene.menuWindow as LayoutMenuController;
var lyt = menu.mainMenu;
while (lyt.NextlayoutManager != null)
lyt = lyt.NextlayoutManager;
if (lyt.LayoutNode.Name == "SkillSelect") // SkillSel...
{
// 基本はロック解除の状態にする
if (lyt.IsLocked())
lyt.UnLock();
// キャンセル禁止
if (Input.KeyTest(Input.StateType.TRIGGER, Input....
lyt.Lock();
}
***イベント用フリーレイアウトの表示位置を制御にはどうした...
まず以下のようにdefaultPositionにも値を設定する必要があり...
(defaultPositionにアクセスするためキャストも必要)
var node = lyt.LayoutDrawer.ParseNodes().FirstOrDefault...
node.Position = node.defaultPosition = node.MenuItem.po...
アニメに使用するスプライトが切り替わる時にレイアウトデー...
現在初回のみにSetLayoutPosition()にて位置を設定しておりま...
----
**データベース [#lc2957df]
***キャストのデータベースに記入してある管理タグ+メモの文...
tags というフィールドがそうです。
下記にてアクセスできます。
catalog.getItemFromName<Yukar.Common.Rom.Cast>("Hero").t...
***キャストが習得するスキルの一覧を取得することはできます...
キャストが習得するスキルは Cast.availableSkills に入って...
var learnSkills = catalog.getItemFromName<Yukar.Common.R...
スキルはGUIDの形で格納しているので、下記のように更にCatal...
if (learnSkills.Count > 0)
{
var skill = catalog.getItemFromGuid(learnSkills[0].s...
GameMain.PushLog(DebugDialog.LogEntry.LogType.EVENT,...
}
全スキルの一覧は下記の方法で取得することができます。
var allSkills = catalog.getFilteredItemList<Y...
***コモンイベントから現在バトル中の敵キャストの所持金やド...
下記の方法で先頭のモンスターの経験値を取得できます。
BattleSequenceManagerBase.Get().EnemyViewDataList[0].mon...
また、下記の方法で先頭のモンスターの1つ目のドロップアイテ...
var guid = BattleSequenceManagerBase.Get().EnemyViewData...
var name = catalog.getItemFromGuid(guid)?.name;
実際に利用する際は、 EnemyViewDataList や dropItems の Co...
**サウンド [#j1ecc16a]
***効果音を再生するコードはありますか? [#jc656827]
下記のようにcatalogからromを取得してください。
var rom = catalog.getItemFromGuid(guid) as Yukar.Common....
Audio.LoadSound(rom);
***BGMをクロスフェードさせることはできますか? [#sc2b77d2]
システムとしてのBGMは再生ラインを一つしか持っていないため...
まず下記の方法で、効果音として音量ゼロで再生開始(この場...
var id = Audio.LoadSound(guid);
Audio.PlaySound(id, 0, 0, 1);
その後下記を使って、毎フレームボリュームを操作し、前のBGM...
Audio.SetSEVolume(id, volume);
----
**そのほか [#i83a30a8]
***バトル中にバトルカメラを切り替えることはできますか? [...
下記のコードで変更できます。
GameMain.instance.data.system.currentBattleCa...
カメラ切り替わりのタイミングで反映されますが、即時反映し...
mapScene.applyCameraToBattle();
ただし、こちらはバトルイベントにアサインしたC#からしか効...
***特定の画像を表示させたい場合、Graphics.DrawImageの引数...
Start() 内などでまず下記のようなコードを使ってテクスチャ...
tex = catalog.getItemFromName<Yukar.Common.Re...
Graphics.LoadImage(tex);
その後、描画したい場面で(Update, AfterDrawなどのタイミン...
Graphics.DrawImage(tex, x, y);
使用後、下記のようにイベント破棄時に使用した画像を解放し...
public override void Destroy()
{
Graphics.UnloadImage(tex);
}
***イベント生成mapChr.CreateEvent()は使用可能でしょうか?...
使用可能です。
mapChr.CreateEvent(guid, dir); のように使えます。
dir は発射元と同じ方向を向かせたい場合、 mapChr.getDirect...
guidはキャストのGUIDです。
catalog.getItemFromName("取得したいキャストの名前").guId ...
GUIDは一度キャストを作ったら変化しません。ですので、ログ...
***GameMainクラスにあるgetRelativeParam60FPS関数は、どう...
getRelativeParam60FPS は直前のフレームからの経過時間を60F...
つまりこのメソッドは1フレームにかかった時間(60FPSであれば...
#br
C#スクリプトの Update() 内でframeCount++; とすると frameC...
しかしこの方法だと、処理落ちが発生していたり、リフレッシ...
そこで、frameCount++ のかわりに frameCount += getRelative...
Update 1回につきかかった時間が 1/60 秒でなかった場合にも...
***マウスの位置に対してのマップ上(3D空間上)の座標を求める...
Util.UnProject2World()は画面上のXY座標を3D空間上の座標時...
現在のカメラの射影行列とビュー行列を渡します。
基本的には mapScene.CurrentPP, mapScene.CurrentVV を指定...
***Input.KeyTest()にてKeyStateにTOUCHを指定した場合、Stat...
Input.KeyTest()はゲーム中の入力デバイスの状態を取得するメ...
タッチ動作のシミュレーションが目的のためそのような値を返...
加工なしの値が欲しい場合は、GameStateをWALKではなくSYSTEM...
***プレイヤーのジャンプ中の位置を変更する方法(ジャンプ操...
setPositiionを使うとはvelocityのリセットがかかってしまう...
***カメラツールのフレームのプロパティ「光源設定>DOF焦点...
C#スクリプトから変更の場合、以下になります。
カメラ
mapScene.CameraManager.ntpCamera
キーフレーム
getKeyFrame()
DOF
Yukar.Common.Rom.Camera.KeyFrame.dof
X=焦点係数, Y=焦点範囲係数, Z=ぼかし半径
C#スクリプトで値を変更した場合、カメラツールで設定してい...
***セーブデータの保存スロットの番号(0-)の取得方法を教えて...
var indexに保存スロットの番号を取得しています。
[BakinFunction(Description = "説明文 / Description")]
public void Func()
{
var lc = mapScene.GetMenuController();
var lm = lc.mainMenu;
var index = lm.SelectProp.SelectSaveIndex;
}
var lm = lc.mainMenuはメインメニューから保存した場合にな...
イベントから「セーブ画面を表示」で保存した場合は、lm = lc...
ページ名: