using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerDebug : MonoBehaviour{ //移動スピード public float speed = 0.1f; //移動量 float movement = 0f; float addmovem = 0.01f; //加算量 //ボールを持っているかの判定 [SerializeField] bool have_ball = false; // [SerializeField] GameObject myHandPos_Obj; CharacterAnimation _characterAnimation; Ball ballScript; GameManager gmanager; GameObject ball; void Start () { // _characterAnimation = GetComponent(); gmanager = GameObject.Find("Manager").GetComponent(); //myHandPos_Obj = transform.FindChild("Bip001 L Hand").gameObject; } void Update () { //ドリブル if (have_ball) { //if (!addflame)//シュート中にドリブルしてしまうため、判定を追加 ballScript.dribble(myHandPos_Obj.transform.position, 50); } //移動を止めたときにmovementの初期化 if (Input.GetAxisRaw("Horizontal") == 0 && Input.GetAxisRaw("Vertical") == 0 && movement != 0f) { movement = 0f; } Move(); } // void Move() { float angley = transform.eulerAngles.y; //左に移動 if (Input.GetAxisRaw("Horizontal") == -1) { //posx -= speed; movement += addmovem; angley = -90f; } //右に移動 if (Input.GetAxisRaw("Horizontal") == 1) { //posx += speed; movement += addmovem; angley = 90f; } //後ろに移動 if (Input.GetAxisRaw("Vertical") == -1) { //posz -= speed; movement += addmovem; angley = 180f; } //前に移動 if (Input.GetAxisRaw("Vertical") == 1) { //posz += speed; movement += addmovem; angley = 0f; } // if(movement > 1f) { movement = 1f; } //angleからプレイヤーの向きを変更 transform.rotation = Quaternion.Euler(0, angley, 0); //プレイヤーが向いている方向に移動 transform.Translate(Vector3.forward * speed * movement); //移動アニメーションさせる _characterAnimation.AnimatorFloat("move", movement); } /* //========================================================================================== //シュート関連 //========================================================================================== //ボールを投げてシュートする void BallThrowShoot(Vector3 targetPos) { Debug.Log("Goal = " + targetPos); Rigidbody rig = ballObj.GetComponent(); //計算 //ゴールまでの距離 float distance = Vector3.Distance(transform.position, new Vector3(targetPos.x, transform.position.y, targetPos.z)); //ゴールまでのベクトル(方向) //Vector3 vec_ThrowAngle = targetPos - shootTrans.transform.position; float gravity = Physics.gravity.y;//重力加速度 //Rigidbodyの質量の変化で投げる距離が変動しないように、質量を掛けることで補正を掛ける vec_ThrowAngle *= rig.mass; gravity *= rig.mass; //3ポイントの距離を想定した高さへ調節 vec_ThrowAngle /= 3; gravity *= 1.5f; //================================================================================================ //重力分を加算。Yは負の値なので正に補正を掛ける //================================================================================================ vec_ThrowAngle.y += -gravity; //================================================================================================ //投げる //================================================================================================ //ballObj.transform.position = shootTrans.position;//念のためもう一度ボールの位置を調整する rig.isKinematic = false; rig.useGravity = true; rig.AddForce(vec_ThrowAngle, ForceMode.Impulse);//力を掛けてボールを飛ばす //カメラを接近させる StartCoroutine(GameObject.Find("Main Camera").GetComponent().cameraShootActionTargetBall()); //BallThrowAfter(); } //---------------------------------------------------------- //---------------------------------------------------------- //ボタンから呼び出される・シュート前準備 public void shootPreparation() { //シュート用ゲージの位置を合わせて表示させ、ゲージアクション開始 GetComponent().setGaugePosition(this.transform); GetComponent().toDecideAim(true); } //---------------------------------------------------------- //呼び出される public void Shoot() { //カメラを接近させる //StartCoroutine(GameObject.Find("Main Camera").GetComponent().cameraShootAction(shootTrans.transform.position)); if (have_ball && !shootanm && !throwOK) { //ゴールポストの方へ向く transform.LookAt(new Vector3(goalpost[targetGoalNum].transform.position.x + targetPos[0], transform.position.y, goalpost[targetGoalNum].transform.position.z)); //flameの加算を始めるため addflame = true; shootanm = true; flag.buzzerBeater = true; //シュートのアニメーションをさせる _charaanime.AnimatorTrigger("shootTrans"); //ボールを持っている状態のアニメーションを止める _charaanime.AnimatorBool("ball_have", false); } } //---------------------------------------------------------- //シュート処理 void Shooting() { if (!isShootOK) return; playerShoot.GaugeJudge();//ゲージの計算 //ゴールの位置 Vector3 goalTargetPos = goalpost[targetGoalNum].transform.FindChild("GoalTargetPoint").gameObject.transform.position; Debug.Log("ゴールのポジション = " + goalTargetPos); //シュート成功判定がfalseなら、ゲージで算出したずれを加算する if (!playerShoot.getShootSuccess()) { //goalTargetPos += playerShoot.getShootEndPoint(); Debug.Log("シュート失敗判定のため、ずらす" + playerShoot.getShootEndPoint()); } flag.shootsuccess = true; //リプレイ用(まだ使えない) //GameObject.Find("Manager").GetComponent().mode = 0; //ボールの位置を調整する ballObj.transform.position = shootTrans.position; ballObj.GetComponent().enabled = true;//コライダー有効 //ボールの物理とコライダーを有効にし、飛ばしたのちに初期化 ballObj.GetComponent().isKinematic = false; //投げる処理 BallThrowShoot(goalTargetPos); ballObj.transform.parent = null; ballObj = null; isShootOK = false; //jstartf = false; flag.buzzerBeater = false; BallThrowAfter(); } //---------------------------------------------------------- //シュートアニメーション時にジャンプさせる public void ShootAnimation() { float jampstart = 15f; //ジャンプするタイミング //フレームを加算させるかをaddflameで判定する if (addflame) { flame++; } if (flame >= jampstart) { jstartf = true; } //フレームがシュートするタイミングになったとき if (flame >= shootf) { isShootOK = 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 rewriteSpeed(float re_speed) { //playerMoveSpeed = re_speed; } //キャラクターがボールを持つ void BallGet() { ballScript = ball.GetComponent(); //ボールの物理、コライダーを無効化する ball.GetComponent().isKinematic = true; ball.GetComponent().enabled = false;//コライダー無効化 have_ball = true; //ボールを子要素にし、位置と向きを調整 ball.transform.parent = transform; ball.transform.position = myHandPos_Obj.transform.position; ball.transform.rotation = Quaternion.Euler(0, 0, 0); //ボールを持っている状態のアニメーションをさせる _characterAnimation.AnimatorBool("ball_have", true); //カメラに追従してもらうため、このオブジェクトを登録する GameObject.Find("Main Camera").gameObject.GetComponent().charBall = gameObject; //FlagManagerにチームボールの判定をさせる GameObject.Find("Manager").GetComponent().ballChara = gameObject; } //あたり判定 private void OnCollisionEnter(Collision collision) { if (have_ball) return; //レイヤー名取得 string layerName = LayerMask.LayerToName(collision.gameObject.layer); //レイヤー名がボールであればボールを消してボールを持っている状態にする if (layerName == "ballObj") { ball = collision.gameObject; BallGet(); } } }