質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

1628閲覧

スクリプトの一部が実行されたり、実行されなかったりします。

dsalkfda

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/09/01 21:19

###発生している問題・エラーメッセージ

unityちゃんを移動させるスクリプトを、動かすアバターにつけたのですが、スクリプトの一部が実行されたり、実行されなかったりします。 以下のcospeedの値は画面上のジョイスティックを動かすと、数秒はインスペクタ上で値が変わるのですが、その後値が一定になります。 ジョイスティックを動かすのをやめて数秒待つとcospeedは0になり、また操作を受けつけるようになります。 ほかのh,v,sizeはインスペクタ上でジョイスティックを動かすたびに値を変えました。 またジョイスティックの作成には以下のサイトのスクリプトを利用させていただきました。 http://kan-kikuchi.hatenablog.com/entry/uGUI_Joystick_1

###該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; public class move : MonoBehaviour { public static int BattleLocoState = Animator.StringToHash("BattleLoco"); public static int BattleBackState = Animator.StringToHash("BattleBack"); //作成したJoystick [SerializeField] //privateフィールドをインスペクタに表示する際に付けるおまじない private Joystick _joystick = null; // 以下キャラクターコントローラ用パラメタ // 前進速度 public float forwardSpeed = 7.0f; // 後退速度 public float backwardSpeed = 2.0f; // 左右速度 public float LRSpeed = 2.0f; //速度補正値 public float cospeed; // ジャンプ威力 public float jumpPower = 3.0f; private Vector3 velocity; public float h; public float v; public float size; public Animator anim; private AnimatorStateInfo currentBaseState; // Use this for initialization void Start () { } // Update is called once per frame void FixedUpdate () { h = _joystick.Position.x; // 入力デバイスの水平軸をhで定義 v = _joystick.Position.y; // 入力デバイスの垂直軸をvで定義 currentBaseState = anim.GetCurrentAnimatorStateInfo(0); // 参照用のステート変数にBase Layer (0)の現在のステートを設定する // 以下、キャラクターの移動処理 velocity = new Vector3(h, 0, v); // 上下左右のキー入力からxz平面の移動量を取得 velocity = transform.TransformDirection(velocity); // キャラクターのローカル空間での方向に変換 size = velocity.magnitude; anim.SetFloat("Speed", size); // Animator側で設定している"Speed"パラメタにSpeedを渡す anim.SetFloat("Direction", h); // Animator側で設定している"Direction"パラメタにhを渡す //idleとloco、back、jump以外で移動できないようにする。 if (currentBaseState.nameHash == playerinput.idleState | currentBaseState.nameHash == BattleLocoState | currentBaseState.nameHash == BattleBackState | currentBaseState.nameHash == playerinput.jumpState) { if (v > 0) { if (h > 0) { cospeed = LRSpeed * h + forwardSpeed * v; velocity *= cospeed; } else { cospeed = LRSpeed * -h + forwardSpeed * v; velocity *= cospeed; } } else if (v < 0) { if (h > 0) { cospeed = LRSpeed * h + forwardSpeed * -v; velocity *= cospeed; } else { cospeed = LRSpeed * -h + forwardSpeed * -v; velocity *= cospeed; } } else { if (h == 0) { cospeed = 0; velocity *= 0; } } } // 上下左右のキー入力でキャラクターを移動させる transform.localPosition += velocity * Time.fixedDeltaTime; } }

###試したこと
シーン上唯一のこのアバターにだけつけていたアニメーターを外すと問題なく動くようになりました。
アニメーターをつけても、https://www.mixamo.com/#/?page=1&query=idleの30fpsのアニメーションが実行されてる程度です。
###補足情報(言語/FW/ツール等のバージョンなど)
バージョンはUnity 2017.1.0f3 (64-bit)です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

if (currentBaseState.nameHash == playerinput.idleState | currentBaseState.nameHash == BattleLocoState | currentBaseState.nameHash == BattleBackState | currentBaseState.nameHash == playerinput.jumpState)
この条件を満たさないとcospeedは変更されません。

  1. 入力時、最初はidleStateなのでcospeedが変更され、移動する。
  2. 入力に伴い上記条件のどれでもないStateに入る。
  3. if文に合致しないのでcospeedが変更されない。
  4. 入力せずにいると「どれでもないState」からidleStateに遷移し、if文に入るようになる。

(入力が無いのでcospeedが0になる)

このような挙動になっているのではないかと推測されます。
State名が合っているかご確認ください。

投稿2017/09/09 03:31

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問