//モーションを実装する関数群 //移動して向きを移動方向にする void Player::MoveRotationMotion(){ float ElapsedTime = App::GetApp()->GetElapsedTime(); Vector3 Angle = GetAngle(); //Transform auto PtrTransform = GetComponent<Transform>(); //Rigidbodyを取り出す auto PtrRedit = GetComponent<Rigidbody>(); //現在の速度を取り出す auto Velo = PtrRedit->GetVelocity(); //目的地を最高速度を掛けて求める auto Target = Angle * m_MaxSpeed; //目的地に向かうために力のかける方向を計算する //Forceはフォースである auto Force = Target - Velo; //yは0にする Force.y = 0; //加速度を求める auto Accel = Force / m_Mass; //ターン時間を掛けたものを速度に加算する Velo += (Accel * ElapsedTime); //減速する Velo *= m_Decel; //速度を設定する PtrRedit->SetVelocity(Velo); //回転の計算 float YRot = PtrTransform->GetRotation().y; Quaternion Qt; Qt.Identity(); if (Angle.Length() > 0.0f){ //ベクトルをY軸回転に変換 float PlayerAngle = atan2(Angle.x, Angle.z); Qt.RotationRollPitchYaw(0, PlayerAngle, 0); Qt.Normalize(); } else{ Qt.RotationRollPitchYaw(0, YRot, 0); Qt.Normalize(); } //Transform PtrTransform->SetQuaternion(Qt); }