【Unity2D】实现敌人Enemy简单AI的巡回移动

上一篇文章:【Unity2D】实现敌人随机简单AI来回移动_dangoxiba的博客-CSDN博客先把制作好动画帧表格导出来,我的是32*32像素的,按下面两张图把参数修改一下,并且裁剪出四张图来,把第一张图作为一个游戏对象再准备好一个EnemyBlueBug的C#脚本,我们就来编写代码,设计好随机移动,以及能移动的范围。using System.Collections;using System.Collections.Generic;using UnityEngine;public class EnemyBlueBug : Enemy{ public float mo..https://blog.csdn.net/dangoxiba/article/details/122698155

参考视频:秦无邪OvO的个人空间_哔哩哔哩_Bilibili秦无邪OvO,独立游戏开发者/美术/编曲;秦无邪OvO的主页、动态、视频、专栏、频道、收藏、订阅等。哔哩哔哩Bilibili,你感兴趣的视频都在B站。icon-default.png?t=N7T8https://space.bilibili.com/335835274?from=search&seid=2940030192624790742&spm_id_from=333.337.0.0

学习目标:

实现敌人Enemy简单AI的巡回移动,上一篇文章讲到位置的随机移动,现在可以来实现巡回来移动,这里采用左右移动。


学习内容:

先把几个空对象设置好,leftPos,rightPos还有EnemyBlueBug,必须处于y轴平行,即y轴位置相同,然后就把EnemyBlueBug贴着墙的最左最右边,leftPos,rightPos即可粘贴他的位置。

然后改进一下上次打的代码


代码部分:

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

public class EnemyBlueBug : Enemy
{
    public float moveSpeed;
    public float startTime;
    public float waitTime;

    public Transform leftPos;
    public Transform rightPos;
    public Transform movePos;
   public void Start()
    {
        base.Start();
        waitTime = startTime;
        movePos.position = leftPos.position;
    }

    // Update is called once per frame
   public void Update()
    {
        base.Update();
        transform.position = Vector2.MoveTowards
                                     (transform.position, movePos.position, moveSpeed * Time.deltaTime);
        if(Vector2.Distance(transform.position, leftPos.position) < 0.05f)
        if (waitTime <= 0)
        {
            movePos.position = rightPos.position; 
        }
        else
        {
            waitTime -= Time.deltaTime;
        }
        if (Vector2.Distance(transform.position, rightPos.position) < 0.05f)
            if (waitTime <= 0)
            {
                movePos.position = leftPos.position;
            }
            else
            {
                waitTime -= Time.deltaTime;
            }
    }

然而这里没有对敌人进行转向的功能,再加几行即可。

前面那段逆天,后面不知道为什么到右边的墙不会旋转,也改不了Righbody2D的速度

在其他视频发现Scale改变x的值即可。

下面是最终代码:

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

public class EnemyBlueBug : Enemy
{
    public float moveSpeed;
    public float startTime;
    public float waitTime;

    public Transform leftPos;
    public Transform rightPos;
    public Transform movePos;

    private Rigidbody2D rb2D;
   public void Start()
    {
        base.Start();
        rb2D = GetComponent<Rigidbody2D>();
        waitTime = startTime;
        movePos.position = leftPos.position;
        
    }

    // Update is called once per frame
   public void Update()
    {
        base.Update();
        transform.position = Vector2.MoveTowards
                                     (transform.position, movePos.position, moveSpeed * Time.deltaTime);
        if (Vector2.Distance(transform.position, leftPos.position) < 0.1f)
        {
            if (waitTime <= 0)
            {
                waitTime = startTime;
                transform.localScale = new Vector3(-1, 1, 1);
                //transform.localRotation = Quaternion.Euler(0, -180, 0);
                movePos.position = rightPos.position;

            }
            else
            {
                waitTime -= Time.deltaTime;
            }

        }

        if (Vector2.Distance(transform.position, rightPos.position) < 0.1f)
        {
            if (waitTime <= 0)
            {
                waitTime = startTime;
                transform.localScale = new Vector3(1, 1, 1);
               // transform.localRotation = Quaternion.Euler(0, -180, 0);
                movePos.position = leftPos.position;

            }
            else
            {
                waitTime -= Time.deltaTime;
            }
        }
    }
    //Vector2 GetRandomPos()
    //{
    //    Vector2 randomPosition = new Vector2(Random.Range(leftPos.position.x, rightPos.position.x),
    //        Random.Range(leftPos.position.y, rightPos.position.y));
    //    return randomPosition;
    //}
}

 


学习产出:

新学了一个通过Transform.localScale的x值可以转向

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值