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

目次


画像の表示と消去

画像の表示(スクリプト)

$gameScreen.showPicture(番号,"画像の名前",原点,x座標,y座標,幅の拡大率,高さの拡大率,不透明度,合成方法)

画像の消去(スクリプト)

$gameScreen.erasePicture(ピクチャ番号)

スクリプトでプラグインコマンドを使う

Game_Interpreter.prototype.pluginCommand("コマンド名",["hoge1","hoge2"]);

攻撃したバトラーのIDと攻撃を受けたバトラーのIDの取得

_lastTargetIndexでIDを取得した時の現状の問題点

  • _lastTargetIndexでIDを取得した場合、あくまでターン開始時?に選んだバトラーのIDなので、
目標のバトラーが既に死んでいた場合、実際は別のバトラーを攻撃する
スクリプトで_lastTargetIndexのIDを使う場合、NULLアクセス対策をする場合がある

$gameTroop.members()[敵のID].isStateAffected(1)
$gameTroop.members()._lastTargetIndex

敵が攻撃した時の攻撃目標のアクターID

$gameParty.members()[対象のID]._actorId;

敵が攻撃した時の攻撃目標の名前

$gameParty.members()[対象のID]._name);
現在行動中の敵のID
  • $gameTroop.members()[BattleManager._subject.index()].index()
BattleManager関連
  • BattleManager._subject.isEnemy() // 使用者がエネミーかどうか
  • BattleManager._subject.index() // 使用者のエネミーインデックスを取得
  • BattleManager._subject.actorId() // 使用者のアクターIDを取得
  • BattleManager._subject.index();最後に行動したアクター・敵キャラのインデックス
  • BattleManager._subject._lastTargetIndex //最後の行動で対象になったアクター・敵キャラのインデックス

デバッグ画面

  • マップ画面で[F9]キーを押すと、デバッグ画面を開くことが出来る
    • スイッチや変数の状態を確認したり、変更したりすることが出来る
    • 戦闘中やイベント中は開けない

ツクールMVの制御文字

コンソール関連

  • 文字と変数をコンソールログに表示する
    • console.log( '変数1 : ' , $gameVariables.value(1))
よく使う例
console.log('変数ID***:' , $gameVariables.value(***) );

変数、配列の操作

変数の値を参照
  • $gameVariables.value(変数のID)
変数の値を変更
  • $gameVariables.setValue(ID ,値 )
配列の場合
  • $gameVariables.value(変数のID)[値]
$gameVariables._data[5] = [3, 2, 8];
$gameVariables._data[5][0] += 10;

スクリプトコマンドメモ

  • ツクールMVの変数の値の取得
$gameVariables.value(ツクールMVの変数ID);
  • ツクールMVの変数への代入

$gameActorsと$gamePartyの違い

  • $gameActors
    • Game_Actors
    • ゲーム実行中のアクターのデータ 管理番号順(1スタート)
    • 例:$gameActors.actor(1).name()
  • $gameParty
    • Game_Party
    • 加入しているアクター 加入順(0スタート)
    • 例:$gameParty.members()[0].name()

敵のIDと敵のインデックスの違い

  • エネミーID:データベースに登録した敵のID番号
  • エネミーインデックス:戦闘中の敵のユニークな値

バトル中の実際に表示される敵の名前(ザコA、ザコB、ザコC……)

  • $gameTroop.members()[n].name()
    • 指定したインデックスの敵キャラの表示名(同一の敵キャラが複数いる場合に後ろに「A」「B」...がつきます)

バトル中の行動主体

  • 現在行動しているキャラ:BattleManager._subject
  • 現在行動しているキャラのインデックス
    • BattleManager._subject.index()
  • 現在行動しているキャラのは敵か味方か?
    • trueなら味方、falseなら敵
    • BattleManager._subject.isActor()

バトラーのステートの取得

  • 味方の場合
--$gameActors.actor(m).isStateAffected(n)
--m;アクターID? n;確認したいステートID
    • $gameParty.members()[n].isStateAffected(n)
    • $gameParty.members[n].states()
    • 有効になっているステートの配列を取得
  • ステートの名称を取得
  • $gameParty.members()[0].states()[0].name
  • 敵の場合
    • $gameTroop.members()[m].isStateAffected(n)
    • m;敵のインデックス n;確認したいステートID
  • ステートの名称を取得
$gameTroop.members()[0].states()[0].name

バトラーへのステートの付与や解除

  • 味方の場合
    • $gameParty.members()[n].addState(id)
      • 指定したステートidのステートを付与
    • $gameParty.members()[n].removeState(id)
      • 指定したステートidのステートを解除
  • *ステートのアイコンが消えるタイミングはずれるので注意
  • 敵の場合
    • $gameTroop.members()[m].addState(id)
      • 指定したステートidのステートを付与
    • $gameTroop.members()[m].removeState(id)
      • 指定したステートidのステートを解除
  • 最後に攻撃した敵
$gameParty.inBattle() ? BattleManager._subject._lastTargetIndex : $gameTroop.members()._lastTargetIndex

$gameParty.inBattle() ? BattleManager._subject._lastTargetIndex : $gameParty.members()._lastTargetIndex

戦闘関連

  • 今攻撃しようとしている敵のID
    • BattleManager._subject._enemyId

一時メモ

  • プラグインはどこのタイミングで読み込まれるのか?
  • callとapplyの違い
  • ツクールMV内で使われている変数IDと使われていない変数IDの見つけ方

◎自動イベントを試す
◎Javascriptで調べること
  • JavaScriptのprototypeとは何か?
  • 配列とオブジェクトの違い

◎デバッグ関連
  • ブレークポイントを試す
  • ステップ実行を試す
  • 参考サイト

プラグインの仕様

  • プラグインの名前
    • @plugindesc ****
  • @author
    • 制作者の名前
  • @help
    • ツクールMVで表示されるヘルプ文
  • @param *****
    • パラメータの名前
  • @desc *****
    • パラメータの説明
  • @default ***
    • プラグイン管理画面でのパラメータのデフォルトの値

戦闘で欲しい情報・やり取りする情報

  • 戦闘の行動ルーチンに関する処理はVSコード(JS)で書く?
  • ツクールMVでは変数を追うのが大変。変更や置換・削除が難しい
  • 敵(バトラー)と味方(アクター)の情報を独自の配列変数に格納したい。
  • 敵のステート配列(文字列)
  • 敵のステート配列(数字)
    • 敵の数は8体、ステートの数は10ぐらい
    • 要素数は8
  • 味方のステート配列(文字列)
  • 味方のステート配列(数字)
    • 味方の数は3体(今回は仲間の入れ替えはなし)、ステートの数は10ぐらい
    • 要素数は3
  • 誰が誰を攻撃したか(敵)(文字列)
  • 誰が誰を攻撃したか(敵)(数字)
    • 要素数は8
  • 誰が誰を攻撃したか(味方)(文字列)
  • 誰が誰を攻撃したか(味方)(数字)
    • 要素数は3

JavaScriptのオブジェクト・プロパティ・メソッド・コンストラクタとは何か?

  • オブジェクトはプロパティの集合
  • プロパティとは名前(キー)と値(バリュー)が対になったもの
    • プロパティの名前(キー)には文字列またはSymbolが利用できる
    • 値には任意のデータを指定できる
    • 1つのオブジェクトは複数のプロパティを持てる
    • 配列や関数などもオブジェクトの一種

オブジェクトの参考例

  const traffic_light = {
    blue: "go",
    yellow: "slow down",
    red: "stop"
  }
  console.log(traffic_light.blue);
  • Consoleにはプロパティ名blue の値である go が出力される

関数とオブジェクトの関連

  • 関数の場合
function hello() {
  alert("hello, techacademy.");
}
hello();
  • 上と同じ意味になる
const hello = function() {
  alert("hello, techacademy.");
}
hello();

メソッドとは何か?

  • 参考サイト
  • メソッドとはオブジェクトのプロパティに代入された関数のこと
  • あるオブジェクトのプロパティに関数を定義した場合、関数と呼ばずにそのオブジェクトのメソッドと呼ぶ

コンストラクタとは何か?

  • 参考サイト
  • インスタンス(実体)を作成する関数のことをコンストラクタと呼ぶ
  • コンストラクタタによってインスタンスを作り初期化も行う
  • JavaScriptでは関数オブジェクトとコンストラクタを使うことで、疑似的なクラスを実現できる仕組みになっている
  • functionで疑似的なクラスを作ったり、new演算子でインスタンスを作っていた
  • サンプルコード
    • Personというコンストラクタを定義して、その中に名前を表すnameと、年齢を表すageのプロパティを定義
function Person(name, age) {
  this.name = name;
  this.age = age;
}
 実際にインスタンスを作成する際は、以下のように「new Person()」でコンストラクタを呼び出して使います。
 
 var person1 = new Person('太郎', 22);
 var person2 = new Person('次郎', 31);
 
 console.log( person1.name );
 console.log( person1.age );
  
 console.log( person2.name );
 console.log( person2.age );
 実行結果:
 
 太郎
 22
 ||=
 次郎
 31
 「new」を付けることで、生成されるインスタンスが「this」にセットされるわけです。
 
 上記のサンプルコードでは「new Person('太郎', 22)」のthisにperson1がセットされ、「new Person(‘次郎', 31)」のthisにperson2がセットされます。
*JavaScriptのPrototypeとは何か?
-prototypeとは継承のようなもの
-あるオブジェクトが他のオブジェクトの性質(メソッドやプロパティ等)を引き継ぐ仕組み
-JavaScriptにクラス構文に対応したのは2015年以降
*pluginCommand 関数
-最初のコマンド名が command 引数で渡される
-コマンド名はプラグイン名にあわせた方が良い
*プラグインコマンドのテンプレート
=|JS|
(() => {
    "use strict";

    const pluginName = 'ファイル名';

    const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args) {
        _Game_Interpreter_pluginCommand.call(this, command, args);

        if (command === pluginName) {
            //処理
        }
    };

})();

JavaScriptの構文の疑問

  • アロー関数と即時関数の違い
    • 通常関数とアロー関数を使った場合の違いはthisキーワードが異なる?

即時関数の使い方

  • 参考サイト
  • 即時関数は、関数を定義すると同時に実行するための構文
◎基本的な描き方
(function () {
    //処理
}());
◎引数付きの場合
(function (param1, param2) {
    //処理
}('hoge', 'fuga'));

アロー関数の使い方

  • アロー関数式は、より短く記述できる、通常の function 式の代替構文
◎基本敵な使い方
  • (引数,...)=>{...関数の本体...}

(() => {

◎strictモード
  • "use strict";
  • 基本的に使ったほうがいい?
  • 他のいかなる文よりも前に “use strict”; (または ‘use strict’;) という文をそのまま追加する
  • strictモードの適用は、「スクリプト全体」ではなく、「関数単位での適用」とする?

コメントをかく


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

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

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

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