Unity中敌人简单逻辑的实现(来回走动,攻击)2D

这篇具有很好参考价值的文章主要介绍了Unity中敌人简单逻辑的实现(来回走动,攻击)2D。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

unity自带一套自动巡航系统,但是目前应该先了解最基本的使用代码控制敌人实现逻辑(1来回走动,2发现玩家时追着玩家,3进入敌人攻击范围时进行攻击),一般来说这是最基本的敌人的功能

分析完敌人所具备的能力后,就将敌人的能力进行拆解,分别进行实现

一 来回走动:敌人在自己的视力范围内没有见到玩家,就会自动来回走动巡逻

敌人的来回移动可以改变transform.position属性来实现,需要设置两个参数,一个敌人移动的速度,一个敌人移动多少秒后转向,也就是时间跨度

在实现完来回走动后会出现敌人会出现一个问题,那就是敌人只会来回移动,不会转向,当敌人改变移动方向时,用transform.localRotation属性进行转向设置,代码如下

 public float Speed;//移动速度
 public int timeSpan;//单向移动时间,60帧为一秒(因为移动函数在fixupdate中)这是外部设置的时间夸度
 private int time;
 int Ry = 0;//怪物转向角度为180度
void Start()
{    
    time = timeSpan;
}
 private void FixedUpdate()
{
    Move();
}
void Move()
{
    Vector2 position = transform.position;
    timeSpan--;       
    if(timeSpan<=0)
    {
        Speed = -Speed;
        if(Speed>0)
        {
            Ry = 0;
        }
        else
        {
            Ry = -180;
        }
        gameObject.transform.localRotation = Quaternion.Euler(0,Ry, 0);//怪物巡逻转向
        timeSpan = time;
    }
    position.x += Speed;
    transform.position = position;       
}

二 跟随玩家:当敌人发现玩家的时候,敌人就会跟随玩家。或者交靠近玩家,目的是为了攻击

  1. 首先为敌人添加一个碰撞器(勾选触发器)用来模拟敌人的视线

unity敌人自动攻击,Unity,unity,游戏引擎,Powered by 金山文档
  1. 当玩家进入敌人的视角触发器时,敌人就需要向玩家靠拢

bool isFind=false;//怪物是否发现玩家,如果发现玩家需要将怪物的状态由巡逻切换为跟随玩家
public GameObject player;//获取到怪物跟随的玩家
private void FixedUpdate()
{
    if (isFind == false)
    {
        Move();//这是巡逻函数
    }
    else if (isFind == true)
    {
        Follow();//这是跟随函数
    }
}
 void Follow()
    {
    Vector2 position=transform.position;
    if(Mathf.Abs(gameObject.transform.position.x - player.transform.position.x)>5)//怪外和角色距离大于某个值时才开始朝玩家移动,这样避免了怪物与玩家冲重合
    {
        if (gameObject.transform.position.x < player.transform.position.x)
        {
            position.x += Speed;
            gameObject.transform.localRotation = Quaternion.Euler(0, 0, 0);//怪物转向
        }
        else if (gameObject.transform.position.x > player.transform.position.x)
        {
            position.x -= Speed;
            gameObject.transform.localRotation = Quaternion.Euler(0, -180, 0);//怪物转向
        }
        gameObject.transform.position = position;
    }        
}
private void OnTriggerEnter2D(Collider2D collision)//玩家进入了怪物的视角(触发器),怪物就会攻击玩家
{
    if (collision.gameObject.tag == "Player")//需要将玩家的标签设为Player
    {
        isFind = true;
    }        
}

三 攻击玩家:当玩家进入到了敌人的攻击范围后敌人就需要进行攻击(如何实现攻击在另一篇有讲)

Animator animator;
 void Start()
{
    animator = GetComponent<Animator>();//敌人的攻击动画
}
 private void FixedUpdate()//完整的fixupdate包含的函数
{
    if (isFind == false)
    {
        Move();
    }
    else if (isFind == true)
    {
        Follow();
        Attack();
    }
}
  void Attack()
{
    if (Mathf.Abs(gameObject.transform.position.x - player.transform.position.x) < 5)//达到可以攻击的距离
    {
        animator.SetBool("CanAttack", true);  
    }
    else 
    {
        animator.SetBool("CanAttack", false);
    }
    }

最后将这三个功能代码进行整合放在fixupdate中就能实现敌人的基础逻辑文章来源地址https://www.toymoban.com/news/detail-524318.html

到了这里,关于Unity中敌人简单逻辑的实现(来回走动,攻击)2D的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【UE4 塔防游戏系列】06-炮塔发射子弹攻击敌人

    1. 新建一个Actor蓝图类,命名为“TotalBulletsCategory”,用来表示子弹蓝图总类,后面会有很多不同类型的子弹会继承该类 打开“TotalBulletsCategory”,添加粒子系统组件、盒体碰撞组件和发射物移动组件  调整发射物重力范围为0 添加一个变量,命名为“ChoosedEnemy”,用来表示子

    2024年02月17日
    浏览(27)
  • unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

    首先展示效果: 在实现敌人自动巡逻这一块我们可以通过使用unity自带组件Nav Mesh Agent(导航网格代理),在省去冗杂的代码量的同时可便利的实现这一功能。 首先为敌人添加Nav Mesh Agent组件: https://docs.unity.cn/cn/2018.4/Manual/class-NavMeshAgent.html 以上是unity官方手册上关于该组件

    2024年02月01日
    浏览(70)
  • Unity UGUI制作字幕滚动效果,长字幕左右来回滚动

    效果: 描述: 当文字长度小于边框时保持在边框的中间,长度大于边框时来回滚动 使用时调用此方法: 创建: 创建一个Image并调整大小 在Image下创建Text并调整Text的大小,颜色等参数 将TextScroll 挂载到Image上并调整TextScroll参数 代码使用了动态添加组件,确保组件能正常使用

    2024年02月07日
    浏览(35)
  • unity敌人的巡逻

     在unityunity游戏开发过程中,敌人、怪物的自动巡逻肯定是无法避免的,今天主要讲 给敌人和怪物设置定点巡逻。 在给怪物、敌人设置顶点巡逻的时候需要引入命名空间using UnityEngine.AI; 这里写了怪物自动巡逻,当玩家靠近到一定距离,停止巡逻,走向玩家,叫指定范围,敌

    2024年02月11日
    浏览(29)
  • Unity随机创造敌人

    先说思路,创建一个大的空物体,然后再创建几个子空物体,子空物体就是敌人的出生点,敌人随机在这些点之上创建。 有了思路,就开始行动 然后创建一个脚本挂在大的空物体上,然后脚本如下

    2024年02月12日
    浏览(23)
  • 在 Unity 中引入第二个敌人运动

    这里的练习演示了敌人额外移动的实现,该移动从屏幕左端角以倾斜角度开始,在到达屏幕近一半时,倾斜到另一个角度以退出窗口。 在进一步讨论之前,请确保敌人和生成管理器(spawn manager)对象处于良好状态,因为需要它们在此处添加此功能。 这是高级伪代码。 首先在检

    2024年01月22日
    浏览(55)
  • 【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

    前两天考完蓝桥杯稍微休息了一下,昨天做了一个动画控制,但是想到写出来可能会字很多,我就搁置到今天来写了,unity learn是一个官方教程平台,里面有unity assert store的配套教程,全是文档,比看视频高效太多了,想学习unity的可以去这里学习   网址 unity learn:Unity3d 教程

    2023年04月13日
    浏览(37)
  • (数字逻辑笔记)用Verilog实现一个简单ALU(组合逻辑)

    实验描述: 输入 :两个4位二进制数,代表两个操作数A,B;一个3位控制信号operation,代表ALU要进行的运算。本实验中,ALU可以实现8种运算: 输出 :4位结果,1位进位 operation | F 000 | A + B 001 | A - B 010 | B + 1 011 | B - 1 100 | NOT A 101 | A XOR B 110 | A AND B 111 | A OR B 实现代码: TestBen

    2024年02月04日
    浏览(38)
  • 【unity之IMGUI实践】游戏玩法逻辑实现【四】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ Target Texture 行为渲染 —————————————— ___________________________ 😶‍🌫️ 步骤 : 1.靠近武器,碰撞检测

    2024年02月16日
    浏览(36)
  • 【unity之IMGUI实践】敌方逻辑封装实现【六】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.炮台的行为逻辑封装:旋转,触发检测,发射炮弹及特效 2.检测玩家后自动瞄准攻击 3.玩家扣

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包