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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, VR
-,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.