如何在AI范围内检测特定对象?

我正在制作一款复刻自Spectrum游戏“蛇坑”的游戏。你可以作为玩家移动,并且有多个由AI控制的蛇。我正在尝试弄明白如何让蛇头在靠近你时移动到你的位置。这是我想实现的代码。

public class SnakeController : MonoBehaviour {public int maxSize;public int currentSize;public GameObject snakePrefab;public Snake Head;public Snake Tail;public Vector2 nextPos;public int NESW;int Random;float lineTimer;int NESWTemp;// Use this for initializationvoid Start () {    InvokeRepeating("TimerInvoke", 0, .3f);    lineTimer = UnityEngine.Random.Range(0, 2.5f);    currentSize = 1;}// Update is called once per framevoid Update () {    lineTimer -= Time.deltaTime;    if (lineTimer <= 0)    {        ComChangeD();        lineTimer = UnityEngine.Random.Range(0, 2.5f);    }}void TimerInvoke(){    Movement();    if(currentSize >= maxSize)    {        TailFunction();    }    else    {        currentSize++;    }}void Movement(){    GameObject temp;    nextPos = Head.transform.position;    if(nextPos.y > 3.22)    {        NESW = 2;    }    else if (nextPos.y < -4.42)    {        NESW = 0;    }    else if (nextPos.x < -8.2)    {        NESW = 1;    }    else if (nextPos.x > 7.7)    {        NESW = 3;    }    switch (NESW)    {        case 0:            nextPos = new Vector2(nextPos.x, nextPos.y + 0.32f);            break;        case 1:            nextPos = new Vector2(nextPos.x + 0.32f, nextPos.y);            break;        case 2:            nextPos = new Vector2(nextPos.x, nextPos.y - 0.32f);            break;        case 3:            nextPos = new Vector2(nextPos.x - 0.32f, nextPos.y);            break;    }    temp = (GameObject)Instantiate(snakePrefab, nextPos, transform.rotation);    Head.SetNext(temp.GetComponent<Snake>());    Head = temp.GetComponent<Snake>();    return;}void ComChangeD(){    NESWTemp = UnityEngine.Random.Range(0, 3);    if (NESW == 0)    {        switch (NESWTemp)        {            case 0:                NESW = 1;                break;            case 1:                NESW = 2;                break;            case 2:                NESW = 3;                break;        }    }    else if (NESW == 1)    {        switch (NESWTemp)        {            case 0:                NESW = 0;                break;            case 1:                NESW = 2;                break;            case 2:                NESW = 3;                break;        }    }    else if (NESW == 2)    {        switch (NESWTemp)        {            case 0:                NESW = 0;                break;            case 1:                NESW = 1;                break;            case 2:                NESW = 3;                break;        }    }    else if (NESW == 3)    {        switch (NESWTemp)        {            case 0:                NESW = 0;                break;            case 1:                NESW = 1;                break;            case 2:                NESW = 2;                break;        }    }}

回答:

在蛇头下创建一个空的游戏对象,并命名为“DetectRange”或类似的名称。然后在检查器中设置它的宽度和高度,以设定你希望蛇跟随玩家的范围大小。这样,当玩家进入这个范围时,蛇就会开始跟随。然后,你可以将玩家对象的标签设置为“Player”或类似名称(这是在检查器顶部设置的)。然后你将脚本附加到DetectRange上,并在其中编写如下代码:

public GameObject playerObject; //在检查器中拖入玩家游戏对象private float snakeSpeed = 1.0f;void OnTriggerStay(Collider col){    if(col.gameObject.Tag == "Player") //检查玩家是否进入了碰撞体    {        playerObject.transform.position = Vector3.MoveTowards(playerObject.transform.position, col.gameObject.position, snakeSpeed);    }}

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注