code VR

Unity×VR(96)

スポンサーリンク

//tips

//asset内animation clipの編集

Assetで導入したプレイヤーのanimationを修正する。

モデルデータの中にAnimationClipが内包されていたので、編集するためにCmd + Dで複製する。複製することでパラメーターを編集できるようになる。

Animator操作については下記も参考にした。

https://docs.unity3d.com/ja/2019.4/Manual/class-Transition.html

ただ、足の動作の部分を確認したら、その場に止まってアニメーションをループできるタイプではなく、ポジション移動を前提にアニメーションが作成されていることがわかったので、別の部分を見直して変更できないか考える。

複製したanimationclipのインスペクターでRootTransformpositionのチェックを入れることで、その場でアクションさせることができるようになった。

さらに左右の移動方向に対して顔の正面が向いていないので、rb.positionではtransform.forwardを用いる形に統一した。

//right キーで右に進む
if (Input.GetKey("right"))
{
Inverseflag = true;
animator.SetTrigger("playwalking");

Vector3 moveForward = transform.position + transform.right * 500;
moveForward.y = 0;
Debug.Log("moveForward" + moveForward);

//Quaternion targetRotation = Quaternion.LookRotation(moveForward - transform.position);
Quaternion targetRotation = Quaternion.LookRotation(moveForward);

transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 2*Time.deltaTime);
//transform.rotation = targetRotation;

//rb.position = transform.position + transform.right * 2.0f * Time.deltaTime;
rb.position = transform.position + transform.forward * 2.0f * Time.deltaTime;

Debug.Log(rb.position);
//MoveGo();
}
//left キーで左に進む
if (Input.GetKey("left"))
{
Inverseflag = true;
animator.SetTrigger("playwalking");

Vector3 moveForward = transform.position - transform.right * 500;
moveForward.y = 0;
Debug.Log("moveForward" + moveForward);

//Quaternion targetRotation = Quaternion.LookRotation(moveForward - transform.position);
Quaternion targetRotation = Quaternion.LookRotation(moveForward);

transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 2*Time.deltaTime);

//rb.position = transform.position - transform.right * 2.0f * Time.deltaTime;
rb.position = transform.position + transform.forward * 2.0f * Time.deltaTime;
//MoveGo();
}

最終的にはiosアプリにするのでスティックのドラッグ操作でのプレイヤー操作とするのでより直感的に操作できるようになる。現在はpc制作段階なので便宜上laptop上の矢印キーでの操作となっている。

アニメーションが2回発動されているように感じるので、スクリプトのデバッグで確認しておく。

if (Input.GetKey("right”))の後にデバッグを入れたら1クリックで7度も呼ばれていた。これは、void FixedUpdate()の中に入れているためでアニメーションは発動中に重ね掛けしないように変更する。

animator.SetBool("on_anim", false)を条件とし用としたがvoid型だったので、ifの条件にはできず、Animation.IsPlayingはAnimationコンポーネントでしか使えないのでphoton利用の際は使えない。

なので、GetCurrentAnimatorStateInfo(レイヤー番号).IsNameの使用を考えていく。レイヤー番号は、1番上にあるのが0番になり、ベースレイヤーとなる。この番号は作成したレイヤーをドラッグして変える事ができる。

if (!animator.GetCurrentAnimatorStateInfo(0).IsName("RabbitWalk3"))
{
Debug.Log("aaa");
animator.SetTrigger("playwalking");
}

アニメーションの現在stateでアニメーション実行中かどうかを判断するため、上記のようにコードを追加したが、状態に移行するまでに、5回ほどDebug.Log("aaa”);が呼ばれてしまい、アクションが複数回実行されてしまう。

アニメーションが別の状態へと遷移する途中ではないという条件も追加して再度確認。

if (!animator.IsInTransition(0)&&!animator.GetCurrentAnimatorStateInfo(0).IsName("RabbitWalk3"))
{
Debug.Log("aaa");
animator.SetTrigger("playwalking");

}

これにより矢印キークリック回数と同じDebug.Log("aaa”);の回数が表示され、アクションも違和感が解消された。

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, VR
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.