栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

unity ai范围内随机移动

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

unity ai范围内随机移动

菜鸡代码,大佬勿喷

矩形的两个对角可以确定矩形大小

 如图a,b两点确定一个矩形范围,或者一个空间范围;

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

public class AiMove : MonoBehaviour
{

    private GameObject End;
    private Transform Db3;
    bool suo = false;
    //时间容器
    float time = 0;
    //时间范围我这里是随机的,也可以改为动值
    int time1;
    //v1,v2确定矩形范围
    Vector3 v1;
    Vector3 v2;
    //目标点
    Vector3 pos;
    // Start is called before the first frame update
    void Start()
    {
        End = PlayGame.Ins.End.gameObject;
        Db3 = End.transform.GetChild(End.transform.childCount - 1);
        v1 = Db3.GetChild(Db3.childCount-1).position;
        v2 = Db3.GetChild(Db3.childCount-1).GetChild(0).position;
        pos=RendV3(v1,v2);
        var a = Instantiate(Resources.Load("dian"));
        a.transform.position = pos;
        suo = true;
    }

    // Update is called once per frame
    void Update()
    {
        if (suo)
        {
            transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime*2);
        }
        else
        {
            time += 0.01f;
        }
        //冷却时间过time1秒后再次行动;
        if (time>time1)
        {
            pos = RendV3(v1, v2);
            //刷新时利用lookat转向
            transform.LookAt(pos);
            //这里需要在目标点生成一个碰撞体以便判断到点
            var a = Instantiate(Resources.Load("dian"));
            a.transform.position = pos;
            time = 0;
            suo = true;
        }
    }

    //根据两点在范围内随机坐标
    Vector3 RendV3(Vector3 a,Vector3 b)
    {
        print(a);
        print(b);
        Vector3 x = new Vector3(Random.Range(a.x,b.x),a.y,Random.Range(a.z,b.z));
        print(x);
        return x;
    }

    private void OnCollisionEnter(Collision col)
    {
        if (col.transform.name=="dian")
        {
            print(1);
            suo = false;
            time1 = Random.Range(3,6);
            Destroy(col.transform.parent.gameObject);
        }
    }
}

最后把脚本放在需要移动的ai上,记得加刚体和碰撞;

触发器用的是OnCollisionEnter,不要勾选isTrigger

这个是平面移动,如果是3D空间内随机移动只需要修改返回的坐标就可以

把函数替换即可

 Vector3 RendV3(Vector3 a,Vector3 b)
    {
        //print(a);
        //print(b);
        Vector3 x = new Vector3(Random.Range(a.x,b.x), Random.Range(a.y, b.y), 
                Random.Range(a.z,b.z));
        //print(x);
        num++;
        return x;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号