Unity/3d/敵の動き
提供: 初心者エンジニアの簡易メモ
2023年5月8日 (月) 20:02時点におけるAdmin (トーク | 投稿記録)による版 (ページの作成:「==プレイヤーの周りを敵が回転しながら一定間隔で止まる動き== <pre> GameObject targetAvater; // プレイヤーキャラ public float rotationSpee...」)
プレイヤーの周りを敵が回転しながら一定間隔で止まる動き
GameObject targetAvater; // プレイヤーキャラ public float rotationSpeed = 135.0f; // 回転速度 public float rotationRadius = 2.0f; // 回転半径 public float maxDistance = 10.0f; // 最大追跡距離 private bool isMoving = true; // 移動中かどうかのフラグ public float moveDuration = 2.0f; // 移動時間 public float stopDuration = 1.0f; // 停止時間 private float moveTimer = 0.0f; // 移動タイマー private float stopTimer = 0.0f; // 停止タイマー private float playerDirect; // 敵とプレイヤーの距離 // Playerの周りをぐるぐる回る void UpdateEnemyRotationPlayer() { // プレイヤーとの距離を計算 playerDirect = Vector3.Distance(transform.position, targetAvater.transform.position); // プレイヤーが最大追跡距離以内にいる場合 if (playerDirect <= maxDistance) { // 移動中の場合 if (isMoving) { // 回転角度を計算 float rotationAngle = rotationSpeed * Time.deltaTime; // 回転中心周りに回転 transform.RotateAround(targetAvater.transform.position, Vector3.up, rotationAngle); // 向きを回転に合わせて変更 transform.LookAt(targetAvater.transform.position); // 移動タイマーが移動時間を超えたら停止する moveTimer += Time.deltaTime; if (moveTimer > moveDuration) { isMoving = false; stopTimer = 0.0f; moveTimer = 0.0f; } } else { // 停止中の場合 // 停止タイマーが停止時間を超えたら移動する stopTimer += Time.deltaTime; if (stopTimer > stopDuration) { isMoving = true; stopTimer = 0.0f; moveTimer = 0.0f; } } } else { UpdateEnemyTrace(); } }