Anyportraitでゲームに用いた実装
これはUnity アセット真夏のアドベントカレンダー 2020 Summer!9日目8月9日の記事です。
ゲームに用いたスクリプトを用いる実装について書きます。
中級者向けの記事になります。
AnyPortraitとはキャラなどに骨などを設定してアニメーションさせるアセットです。
近いアセットやソフトでいうとAnima2DやSpineなどです。
できることの一例
ボーン作成、メッシュ変形、物理動作などなど
初心者向け解説とかもしたかったのですがちょっと量的にでかくなりそうだったので割愛します。
エディタが日本語対応していたり公式から日本語のチュートリアルが出てたりするので公式おすすめ
公式HP
https://www.rainyrizzle.com/anyportrait-jp
とても素晴らしい
開発環境
Unity2019.4.4f1
何をしたか
スクリプトで設定した座標に頭や座標を向かせる
アクションシューティングゲームとかでよくある照準の方向に腕や頭を向かせるやつ
使用した機能
IKコントローラー設定
position・・・エフェクター骨まで移動させる(ボーンの移動範囲外には移動しない)
LookAt・・・エフェクター骨の方向に回転させる
参考資料
公式チュートリアル:骨のIKコントローラ
https://www.rainyrizzle.com/apam-boneikcontroller-jp
やりかた
- エフェクター骨用のボーンを作成 今回は親ボーンを外しておく
左ウィンドウからメッシュグループを選択 - 右のメッシュグループウィンドウから骨を押して骨を編集を押す
- 移動・回転させたいボーンを選択
- 右のIKコントローラーの設定をNoneからLock Atまたはpositionを選択する(今回は頭はLockAt 両腕はPositionを選択した)
- エフェクター骨(移動させる・向かせる場所になるボーン)を選択
-
デフォルトのFK/IK重量を1にする これが0だとOFFで1だとON(制御パラメーターでスクリプトでONOFFやアニメーション毎にONOFFなどもできるがここでは割愛する)
- ベークする
- こんな感じで狙いたいゲームオブジェクトを作成する今回はTargetという名前を付けたゲームオブジェクトを作った
-
こんな感じのスクリプトC_CharaMainを作ってキャラクターのゲームオブジェクトか何かに付ける
using AnyPortrait;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class C_CharaMain : MonoBehaviour
{public apPortrait m_CharaApPortrait;
public Transform m_TargetTrans;
// Start is called before the first frame update
void Start()
{}
// Update is called once per frame
void Update()
{
m_CharaApPortrait.Play("Move", 1, apAnimPlayUnit.BLEND_METHOD.Interpolation, apAnimPlayManager.PLAY_OPTION.StopSameLayer, true);m_CharaApPortrait.SetBonePosition("Target", m_TargetTrans.position, Space.World);
}
}SetBonePosition("Target", m_TargetTrans.position, Space.World);でエフェクター骨用のボーンの座標をスクリプトから移動してる
-
付けていく
こうなる
Targetゲームオブジェクトの方向にキャラの頭が向いて腕が移動するまでができた
回転制限がないので頭が一回転する - 頭の角度を制限
骨の編集画面からボーンを選択して無効な制約をクリック
出てくるピンク色の線が制限角度なのでこれを見ながら角度の最小値最大値を設定する -
完成
あとはマウスでターゲットを動かすなりキャラを動かすなり
現在AnyPortraitを使用してこういうゲーム開発しています。
おすすめです。
朝はどこのPVも作った#wanderdawn #朝はどこ #pixelart #gamedev pic.twitter.com/Wrcf6N269P
— ホロウさま🍣ゲーム開発ドット絵イラスト3Dやってるすし (@tolune) 2020年7月31日