2012年2月24日金曜日

[Unity] ターゲットを追い続けるスクリプト

平面上でターゲットを追い続けるスクリプト
マウスクリック中はダッシュする

  1. var target : Transform; //追いかけるターゲット
  2. private var targetPosition : Vector3; //ターゲットの位置
  3. private var pointOfGaze : Vector3; //オブジェクトの注視点
  4. private var distanceXYZ :Vector3; //オブジェクトとターゲットの距離(XYZ)
  5. private var angleForTarget : float; //Z軸に対してオブジェクトとターゲットがなす角度

  6. var normalMovingSpeed :float; //標準時の移動速度[m/s]
  7. private var MovingSpeed :float; //実際の移動速度[m/s]
  8. var dashScale : float; //ダッシュ時の倍率
  9. private var movingDistanceXYZ : Vector3; //1フレームで移動する距離

  10. private var degToRad = Mathf.PI / 180; //変換 degree → radian

  11. function Update () {
  12. targetPosition = target.transform.position; //ターゲットの位置を取得
  13. distanceXYZ = targetPosition - transform.position; //ターゲットとオブジェクトの距離
  14. if(distanceXYZ.magnitude > 0.5){ //ターゲットが近すぎる際に向きが頻繁に変わるのを防ぐ
  15. //ターゲットの方へ向かせる処理--------------------------------
  16. pointOfGaze = targetPosition;
  17. pointOfGaze.y = transform.position.y; //y軸方向には回転させない
  18. transform.LookAt(pointOfGaze);
  19. //--------------------------------------------------------
  20. angleForTarget = transform.eulerAngles.y;
  21. //左クリック中はダッシュにする-------------------------------
  22. movingSpeed = normalMovingSpeed;
  23. if(Input.GetMouseButton(0)){
  24. movingSpeed *= dashScale;
  25. }
  26. //-------------------------------------------------------
  27. //1フレームあたりの移動量を求める---------------------------
  28. movingDistanceXYZ.x = movingSpeed * Mathf.Sin(angleForTarget * degToRad) * Time.deltaTime;
  29. movingDistanceXYZ.z = movingSpeed * Mathf.Cos(angleForTarget * degToRad) * Time.deltaTime;
  30. movingDistanceXYZ.y = 0;
  31. //-------------------------------------------------------
  32. transform.position.y = target.transform.position.y; //オブジェクトの高さをターゲットと合わせる
  33. transform.position += movingDistanceXYZ; //オブジェクトの座標に移動量を加える
  34. }
  35. }



0 件のコメント:

コメントを投稿