「Unity/3d/敵の動き」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「==プレイヤーの周りを敵が回転しながら一定間隔で止まる動き== <pre> GameObject targetAvater; // プレイヤーキャラ public float rotationSpee...」) |
|||
行53: | 行53: | ||
{ | { | ||
UpdateEnemyTrace(); | UpdateEnemyTrace(); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | ==重力に対して浮遊する== | ||
+ | <pre> | ||
+ | // 浮遊する | ||
+ | float floatingForce = 9.8f; | ||
+ | private void UpdateFloating() | ||
+ | { | ||
+ | if (transform.localPosition.y < 0) | ||
+ | { | ||
+ | Vector3 floatingDirection = Vector3.up; // 上方向に浮遊するためのベクトル | ||
+ | Rigidbody rb = gameObject.GetComponent<Rigidbody>(); | ||
+ | if (rb != null) | ||
+ | { | ||
+ | rb.AddForce(floatingDirection * this.floatingForce, ForceMode.Force); | ||
+ | } | ||
} | } | ||
} | } | ||
</pre> | </pre> |
2023年5月26日 (金) 01:26時点における最新版
プレイヤーの周りを敵が回転しながら一定間隔で止まる動き
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(); } }
重力に対して浮遊する
// 浮遊する float floatingForce = 9.8f; private void UpdateFloating() { if (transform.localPosition.y < 0) { Vector3 floatingDirection = Vector3.up; // 上方向に浮遊するためのベクトル Rigidbody rb = gameObject.GetComponent<Rigidbody>(); if (rb != null) { rb.AddForce(floatingDirection * this.floatingForce, ForceMode.Force); } } }