/// <summary> /// [AllocateFunction] /// 新たに実行関数クラスを割り当てる /// </summary> public void AllocateFunction() { //old保存, 初期化 BaseAIFunction oldSave = nowFunction; nowFunction = null; //検索ループ foreach (AITable table in m_aiTables) { //実行条件を満たしている if (table.isPossibleUpdate) { //確率を基に実行関数設定 nowFunction = table.SelectionFunction(); //成功すれば終了側Callback呼び出し, フラグ初期化 if (nowFunction != null) { m_oldFunction = oldSave; m_oldFunction?.AIEnd(nowFunction, false); m_isBeginCallBackCompleted = false; //Beginをまだ呼び出していない break; } } } //念の為null check, nullなら戻す if (nowFunction == null) { #if UNITY_EDITOR Debug.LogError("Error!! AIAgent->AllocateFunction not found function"); #endif nowFunction = oldSave; } }
/// <summary> /// [ForceSpecifyFunction] /// 強制的に実行中の関数クラス停止させ、指定したものを実行させる /// 引数1: 実行させるfunction /// </summary> public void ForceSpecifyFunction(BaseAIFunction function) { //無効? if (function == null) { return; } //old保存, 初期化 m_oldFunction = nowFunction; nowFunction = function; //Beginをまだ呼び出していない m_isBeginCallBackCompleted = false; //End Callback m_oldFunction?.AIEnd(nowFunction, false); }
/// <summary> /// [ForceSpecifyFunction] /// 強制的に実行中の関数クラス停止させ、指定したものを実行させる /// 引数1: 実行させるfunction /// </summary> public void ForceSpecifyFunction(BaseAIFunction function) { //無効? if (function == null) { return; } //old保存, 初期化 m_oldFunction = nowFunction; nowFunction = function; //Beginをまだ呼び出していない m_isBeginCallBackCompleted = false; //End Callback m_oldFunction?.AIEnd(nowFunction); //debug only, 関数表示用文字列初期化 #if UNITY_EDITOR m_dNowTable = function.tableName; m_dNowFunction = function.functionName; if (function.aiTable != null) { if (function.aiTable.condition != null) { m_dNowTableCondition = function.aiTable.condition.dConditionName; } else if (function.aiTable.isConditionAlwaysTrueSelf) { m_dNowTableCondition = "Always true"; } else if (function.aiTable.isConditionAlwaysFalseSelf) { m_dNowTableCondition = "Always false"; } else { m_dNowTableCondition = "Not condition"; } } else { m_dNowTableCondition = "Not condition"; } #endif }
/// <summary> /// [AllocateFunction] /// 新たに実行関数クラスを割り当てる /// </summary> public void AllocateFunction() { //old保存, 初期化 BaseAIFunction oldSave = nowFunction; nowFunction = null; //検索ループ foreach (AITable table in m_aiTables) { //実行条件を満たしている if (table.isPossibleUpdate) { //確率を基に実行関数設定 nowFunction = table.SelectionFunction(); //Errorチェック #if UNITY_EDITOR if (nowFunction == null) { Debug.LogError("Error!! AIAgent->FixedUpdate now function == null"); nowFunction = oldSave; return; } #endif //成功すれば終了側Callback呼び出し, フラグ初期化 if (nowFunction != null) { //debug only, 関数表示用文字列初期化 #if UNITY_EDITOR m_dNowTable = table.tableName; m_dNowFunction = nowFunction.functionName; if (table.condition != null) { m_dNowTableCondition = table.condition.dConditionName; } else if (table.isConditionAlwaysTrueSelf) { m_dNowTableCondition = "Always true"; } else if (table.isConditionAlwaysFalseSelf) { m_dNowTableCondition = "Always false"; } else { m_dNowTableCondition = "Not condition"; } #endif m_oldFunction = oldSave; m_oldFunction?.AIEnd(nowFunction); m_isBeginCallBackCompleted = false; //Beginをまだ呼び出していない break; } } } //念の為null check, nullなら戻す if (nowFunction == null) { #if UNITY_EDITOR Debug.LogError("Error!! AIAgent->AllocateFunction not found function"); #endif nowFunction = oldSave; } }