Unity鱼随机游动

Unity鱼随机游动的实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mtf : MonoBehaviour
{
    public static Vector2 lt=new Vector2(282,300), rb=new Vector2(382,181);
    //规定鱼的活动范围
    Vector3 flag;//鱼随机到达的目标
    bool has;//是否进入有食物的区域
    public float speed = 5;//移动速度
    public static float rot = 3;//转体速度
    //移动速度可能不同,但转体速度相同
    Vector3 tmp;
    void Start()
    {
        speed = Random.Range(4, 15);
        has = false;
        while (true)
        {
            flag = new Vector3(Random.Range(lt.x, rb.x), transform.position.y,
            Random.Range(lt.y, rb.y));//给他一个随机目标
            if ((flag - transform.position).magnitude > 20)
                break;
        }
    }
    void Update()
    {
        tmp = flag - transform.position;//得到鱼与目标的距离向量
        if (!has && tmp.magnitude < 0.5f)
        {
            speed = Random.Range(4, 15);
            while (true)
            {
                flag = new Vector3(Random.Range(lt.x, rb.x), transform.position.y,
                Random.Range(lt.y, rb.y));//给他一个随机目标
                if ((flag - transform.position).magnitude > 20)
                    break;
            }
        }
        else if (has && tmp.magnitude < 0.1f)
            Destroy(gameObject);//删除鱼
        if (!has)//如果没有食物的话
        {
            float angle = Vector3.Angle(transform.forward, tmp);
            //求出以前方为基准与方向的夹角
            tmp = Vector3.Cross(transform.forward, tmp);
            //点乘求出是向左转还是向右转
            float turn = tmp.y >= 0 ? 1f : -1f;
            //得到转向
            transform.Rotate(transform.up, angle * Time.deltaTime * rot * turn,
                Space.World);//慢慢的看向目标
        }
        transform.Translate(Vector3.forward * Time.deltaTime * speed);
        //鱼只会向前前进
    }
    public void setfoodpos(Vector3 pos)
    {
        has = true;
        speed = 1;
        flag = pos;
        transform.LookAt(flag);
    }
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值