Unity功能 小鱼一边向前移动,一边转弯

场景中挂载生成鱼的脚本

鱼生成的脚本

using UnityEngine;
using System.Collections;

public class FishMaker : MonoBehaviour {

    public Transform fishHolder;//存放鱼的节点
    public Transform[] genPositions;//所有的鱼的Transform
    public GameObject[] fishPrefabs;//所有鱼的预设

    public float waveGenWaitTime = 0.3f;//每波生成间隔的时间
    public float fishGenWaitTime = 0.5f;//每条鱼之间生成的间隔

	void Start () {
        InvokeRepeating("MakeFishes", 0, waveGenWaitTime);//循环生成鱼
	}
	
    //生成本批次鱼
    void MakeFishes()
    {
        int genPosIndex = Random.Range(0, genPositions.Length);//随机一个起点
        int fishPreIndex = Random.Range(0, fishPrefabs.Length);//随机一条鱼
        int maxNum = fishPrefabs[fishPreIndex].GetComponent<FishAttr>().maxNum;//获取本批鱼最大的数量
        int maxSpeed = fishPrefabs[fishPreIndex].GetComponent<FishAttr>().maxSpeed
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一种实现方式: 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()); } ``` 这样,该物体就会一边自身旋转,一边随机移动,并且会在移动到目标位置后等待一段时间再进行下一次移动。您可以根据需要调整变量的值以控制移动和旋转的速度、范围和等待时间。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值