// Update is called once per frame void Update() { Vector3 playerPos = player.position; //プレイヤーの位置 Vector3 direction = playerPos - transform.position; //方向 PlayerContoroll playerControll = refObj.GetComponent <PlayerContoroll>(); //コントローラのスクリプト取得 Quaternion targetRotation = Quaternion.LookRotation(playerPos - transform.position); MovePet movePet = GetComponent <MovePet>(); //y軸にモデルが動かないようxz軸間のみの距離を取得 playerPos.y = 0f; Vector3 direction2 = playerPos - transform.position; float distance = direction2.sqrMagnitude; //距離 direction = direction.normalized; //単位化(距離要素を取り除く) direction.y = 0f; //顔だけ向けて一時停止 if (playerControll.release == false) { animator.SetBool("walk", false); movePet.enabled = false; GetComponent <HeadLookController>().enabled = true; } //トリガーが深く引かれた際にプレイヤー側に回転、移動 if (playerControll.call == true && playerControll.release == false) { animator.SetBool("walk", true); //回転処理 targetRotation = Quaternion.LookRotation(playerPos - transform.position); dogContact = true; } //触れ合い可能状態から待機状態へ戻す else if (playerControll.release == true && movePet.enabled == false) { movePet.enabled = true; playerControll.call = false; GetComponent <HeadLookController>().enabled = false; } rotationSpeed += 0.0015f; //回転処理(犬をゆっくり振り向かせる部分) if (dogContact) { animator.SetBool("walk", true); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed); walkStart = true; if (rotationSpeed >= 1) { rotationSpeed = 0; } } //プレイヤーとの間に一定距離空けつつ移動 if (distance >= limitDistance && walkStart == true) { animator.SetBool("run", true); transform.position = transform.position + (direction * speed * Time.deltaTime); } //停止処理 else if (distance < limitDistance && walkStart == true) { animator.SetBool("run", false); animator.SetBool("walk", false); playerControll.call = false; walkStart = false; dogContact = false; movePet.enabled = false; } //衝突判定なし時間カウント if (colCount > 0) { colCount++; } if (colCount == 40) { colCount = 0; } //衝突離脱時間カウント if (colCount2 > 0) { colCount2++; //衝突離脱以降カウント } if (colCount2 > 80) { //離脱後衝突せず30フレーム経過した時 //尻尾停止、衝突離脱カウントリセット、視線方向をカメラに animator.SetBool("tail", false); colCount2 = 0; dirStart = 1; } //犬の座標固定 var elr = transform.rotation.eulerAngles; transform.rotation = Quaternion.Euler(0, elr.y, elr.z); //Updateごとに強制的にx=0 }
// Use this for initialization void Start() { GameObject objColliderParent = gameObject.transform.parent.gameObject; colliderParent = objColliderParent.GetComponent <PlayerContoroll>(); }