「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);
}
}
}
