using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerAnimation : MonoBehaviour { /// /// キャラクターのアニメーション /// //コンポーネント CharacterAnimation _charaanime; //アニメーションのためのフレーム private int flame; //シュートフレーム シュートするタイミング public int shootf = 60; //フレームを加算する判定 private bool addflame = false; //シュートアニメーション中かどうかの判定 public bool shootanm = false; //シュートアニメーションのジャンプを始めるかの判定 public bool jstartf = false; //シュートアニメーション用のフレーム public float jampf; //シュートアニメーション用のジャンプ力 public float jamp = 1f; //シュートアニメーション用のフレームパーセント public float fper; //シュートアニメーション用のキャラクターの初期Y座標 public float posy; // Use this for initialization void Start () { _charaanime = GetComponent(); flame = 0; jampf = 0f; //6/14 アニメーションで調整した結果の最適値  shootf = 40; jamp = 0.1f; fper = 60f; posy = transform.position.y; } public void jumpJudge() { float jampstart = 15f; //ジャンプするタイミング //フレームを加算させるかをaddflameで判定する if (addflame) { flame++; //ボールを手の位置に合わせさせる GetComponent().ballPosAlignment(); } if (flame >= jampstart) { jstartf = true; } //フレームがシュートするタイミングになったとき if (flame >= shootf) { GetComponent().setShootOK(true); //カメラの追従を止めるため GameObject.Find("Manager").GetComponent().ballChara = null; GameObject.Find("Main Camera").gameObject.GetComponent().charBall = null; //加算を止める addflame = false; flame = 0; //初期化 } //シュートアニメーション時 if (jstartf && shootanm && transform.position.y >= posy) { float y; //Y座標の加算値格納用 float t; //時間 t = jampf / fper; jampf++; y = Mathf.Sqrt(2f * 9.8f * jamp) * t - 0.5f * 9.8f * t * t; //float型の計算で非数値になる場合があるので、その非数値を入れないためIsNaN()を使う if (!float.IsNaN(y)) { transform.position = new Vector3(transform.position.x, transform.position.y + y, transform.position.z); } } else if (!shootanm && jampf > 0f) { jampf = 0f; } //シュートアニメーションのジャンプで落ちすぎないように if (transform.position.y < posy && jampf > 0f) { transform.position = new Vector3(transform.position.x, posy, transform.position.z); //---------------------------------------------------------- shootanm = false; jstartf = false; //---------------------------------------------------------- } } public void jumpJudge(float plussJump) { float jampstart = 15f; //ジャンプするタイミング //フレームを加算させるかをaddflameで判定する if (addflame) { flame++; //ボールを手の位置に合わせさせる GetComponent().ballPosAlignment(); } if (flame >= jampstart) { jstartf = true; } //フレームがシュートするタイミングになったとき if (flame >= shootf) { //カメラの追従を止めるため GameObject.Find("Manager").GetComponent().ballChara = null; GameObject.Find("Main Camera").gameObject.GetComponent().charBall = null; //加算を止める addflame = false; flame = 0; //初期化 } //シュートアニメーション時 if (jstartf && shootanm && transform.position.y >= posy) { float y; //Y座標の加算値格納用 float t; //時間 t = jampf / fper; jampf++; y = Mathf.Sqrt(2f * 9.8f * jamp) * t - 0.5f * 9.8f * t * t; //float型の計算で非数値になる場合があるので、その非数値を入れないためIsNaN()を使う if (!float.IsNaN(y)) { transform.position = new Vector3(transform.position.x, transform.position.y + y, transform.position.z); } } else if (!shootanm && jampf > 0f) { jampf = 0f; } //シュートアニメーションのジャンプで落ちすぎないように if (transform.position.y < posy && jampf > 0f) { transform.position = new Vector3(transform.position.x, posy, transform.position.z); //---------------------------------------------------------- shootanm = false; jstartf = false; //---------------------------------------------------------- } } //移動しない状態  public void Standby() { //moveアニメーションを止める _charaanime.AnimatorFloat("move", 0f); } //各アニメーション public void animSetFloat(string mode, float f) { _charaanime.AnimatorFloat(mode, f); } public void animatorTrigger(string mode) { _charaanime.AnimatorTrigger(mode); } public void animatorBool(string mode, bool b) { _charaanime.AnimatorBool(mode, b); } public void setAddFlame(bool b) { addflame = b; } public void setShootAnm(bool b) { shootanm = b; } public bool isAddFrame() { return addflame; } public bool isShootAnim() { return shootanm; } }