Skip to content

Instantly share code, notes, and snippets.

@muzudho
Last active January 22, 2017 17:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save muzudho/77c26e12cd3489ac24e17220ed58292d to your computer and use it in GitHub Desktop.
Save muzudho/77c26e12cd3489ac24e17220ed58292d to your computer and use it in GitHub Desktop.
UnityEditorを使って2D格闘(2D Fighting game)作るときのモーション遷移図作成の半自動化に挑戦しよう<その1> ref: http://qiita.com/muzudho1/items/9c50b8b894e3cf4c90da
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor; // 追加
public class Banana1 : MonoBehaviour {
[MenuItem("Bye bye Earth!/Rocket1/Space2/Moon3")]
static void GoToTheMoon()
{
Debug.Log("Moon is great!");
}
}
[MenuItem("Bye bye Earth!/Rocket1/Space2/Moon3")]
// (1)コントローラー(ファイル)を作る☆
var controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath("Assets/Mecanim/StateMachineTransitions.controller");
// (2)[parameters] に4つ追加する。
controller.AddParameter("TransitionNow", AnimatorControllerParameterType.Trigger);
controller.AddParameter("Reset", AnimatorControllerParameterType.Trigger);
controller.AddParameter("GotoB1", AnimatorControllerParameterType.Trigger);
controller.AddParameter("GotoC", AnimatorControllerParameterType.Trigger);
// (3)ステートマシン(六角形のやつ)を3つ追加する。
var rootStateMachine = controller.layers[0].stateMachine;
var smA = rootStateMachine.AddStateMachine("smA"); // stateMachineA
var smB = rootStateMachine.AddStateMachine("smB"); // stateMachineB
var smC = smB.AddStateMachine("smC"); // stateMachineC
// (4)ステート(長方形のやつ)を5つ追加する。
var stateA1 = smA.AddState("stateA1"); // (5)(6)
var stateB1 = smB.AddState("stateB1"); // (7)
var stateB2 = smB.AddState("stateB2"); // (7)
smC.AddState("stateC1"); // (8)
var stateC2 = smC.AddState("stateC2"); // (8) don’t add an entry transition, should entry to state by default
// 以下、トランジション(白い矢印の線)を追加する。
// (5)stateA1 から Exit へのトランジション
var exitTransition = stateA1.AddExitTransition(); // stateA1 は Exit につなげる。
exitTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TransitionNow"); // 条件にトリガーを追加する
exitTransition.duration = 0; // duration は 0 に。
// (6)(これは分からない) stateA1 と Any State がつながっていないようだが?
var resetTransition = smA.AddAnyStateTransition(stateA1);
resetTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "Reset");
resetTransition.duration = 0;
// (7)stateB1 は Entry につなげる。
var transitionB1 = smB.AddEntryTransition(stateB1);
transitionB1.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "GotoB1"); // 条件にトリガーを追加する。
// (8)stateB2 も Entry につなげる。
smB.AddEntryTransition(stateB2);
// (9)stateC2 は Entry につなげる方法ではなく、デフォルトとして設定する。
smC.defaultState = stateC2;
// (10)stateC2 は Exit につなげる。
var exitTransitionC2 = stateC2.AddExitTransition();
exitTransitionC2.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TransitionNow"); // 条件にトリガーを追加する。
exitTransitionC2.duration = 0;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment