実行時に、Startで武器の塊を読み込んで、右手の骨にセットする。
キャラクターによって位置や向きが微妙に違うので、キャラごとに微調整する
void Start () { rb = GetComponent<Rigidbody>(); anim = GetComponent<Animator>(); Transform Rhand = anim.GetBoneTransform(HumanBodyBones.RightHand); GameObject RhandPos = Instantiate((GameObject)Resources.Load("RhandPosition"), Vector3.zero, Quaternion.identity) as GameObject; RhandPos.transform.SetParent(Rhand); RhandPos.transform.position = Rhand.position; if (charaNo == 4) //overload { RhandPos.transform.localRotation = Quaternion.Euler(new Vector3(316,81.82f,173.7f)); RhandPos.transform.localPosition = new Vector3(-0.0142f,0.001f,-0.1713f); }
emptyオブジェクトをRhandPositionと改名して、複数の武器を子供として登録して、一つの塊のPrefabにしておく。
剣、ハンマー、拳銃、サブマシンガン、ロケットランチャー、ライフルなど、6種の武器を重ねている。
握りの部分でまとめておくのがミソ。
ぶきを追加するときは、握りを重ねて、塊Prefabに追加するだけで済む。
武器選択のコードも追加がいるが、GUI的な修正が必要最小限で済む。
使用する武器によってその武器のActiveを切り替える
if (weapon == 1) RhandPos.transform.FindChild("Medieval Sward").gameObject.SetActive(true); if (weapon == 2) RhandPos.transform.FindChild("RunicStoneHammer_Iron_Low").gameObject.SetActive(true); if (weapon == 3) RhandPos.transform.FindChild("PM-40_Variant3").gameObject.SetActive(true); if (weapon == 4) RhandPos.transform.FindChild("CQAssaultRifle").gameObject.SetActive(true); if (weapon == 5) RhandPos.transform.FindChild("german_smg_a").gameObject.SetActive(true); if (weapon == 6) RhandPos.transform.FindChild("RocketLauncher_Mobile").gameObject.SetActive(true);
HPインジケーターもStartで読み込んで、頭のボーンを取得して、その上に設定する。
Transform Head = anim.GetBoneTransform(HumanBodyBones.Head); GameObject hpBar = Instantiate((GameObject)Resources.Load("Canvas"), Vector3.zero, Quaternion.identity) as GameObject; hpBar.transform.SetParent(this.transform); hpBar.transform.position = Head.position + Vector3.up * 0.5f;
アニメーションも増えてくるとAnimatorで変数を登録してTrantion作るのが面倒なので、AnyStateを活用する。
繰り返し処理であるIdleやWalk、Runなどは、通常のステート処理として、
キックや剣を振る、銃を撃つなどの一時的な動作はAnyStateから呼び出す。
これはInteger変数一つで分岐先を切り替えられるので、ステート管理用の変数が増えないので管理が楽。
遷移も一方方向なのでAnimatorの登録作業も簡単。
歩行と走行はfloatのSpeed変数で切り替えるようにAnimatorで遷移を作ってみた。
今まではコードの方でSetBoolでステートを管理していた。
また、通常の歩行とゾンビ方向を別の遷移とした。
本来はAnimatorを分けるか、Layerなどを変えるのかもしれないけど。
面倒くさいの一つにまとめてみた。
男性キャラと女性キャラでも移動アニメーションを分けようと思う。
銃で狙いをつけながら歩くモーション。
上半身と下半身をマスクで分けて、歩行と銃構えを合成する方向もあるのだろうけど、ちょっと面倒ですよね。