unity物体一边自身旋转一边随机移动
时间: 2023-09-03 22:15:40 浏览: 121
以下是一种实现方式:
1. 创建一个空物体作为父物体,然后在该物体下创建一个子物体,命名为“Target”(用于记录目标位置)。
2. 给子物体添加一个脚本,命名为“RandomMove”,在该脚本中定义如下变量:
```
public float moveSpeed = 1.0f; // 移动速度
public float rotateSpeed = 30.0f; // 旋转速度
public float moveRange = 5.0f; // 移动范围
public float rotateRange = 45.0f; // 旋转范围
public float waitTime = 1.0f; // 等待时间
```
3. 在脚本中定义一个协程函数“RandomMoveCoroutine”,该函数用于实现随机移动和旋转:
```
private IEnumerator RandomMoveCoroutine()
{
while (true)
{
// 随机生成目标位置
Vector3 targetPos = transform.position + Random.insideUnitSphere * moveRange;
targetPos.y = transform.position.y; // 保持在同一高度
// 记录目标位置
transform.GetChild(0).position = targetPos;
// 计算旋转角度
Vector3 targetDir = targetPos - transform.position;
Quaternion targetRot = Quaternion.LookRotation(targetDir);
// 旋转到目标角度
float t = 0;
while (t < 1.0f)
{
t += Time.deltaTime * rotateSpeed;
transform.rotation = Quaternion.Lerp(transform.rotation, targetRot, t);
yield return null;
}
// 等待一段时间
yield return new WaitForSeconds(waitTime);
// 移动到目标位置
t = 0;
while (t < 1.0f)
{
t += Time.deltaTime * moveSpeed;
transform.position = Vector3.Lerp(transform.position, targetPos, t);
yield return null;
}
}
}
```
4. 在脚本的“Start”函数中启动协程:
```
private void Start()
{
StartCoroutine(RandomMoveCoroutine());
}
```
这样,该物体就会一边自身旋转,一边随机移动,并且会在移动到目标位置后等待一段时间再进行下一次移动。您可以根据需要调整变量的值以控制移动和旋转的速度、范围和等待时间。