Unity2D实现左右移动的敌人角色

文章目录

  • 环境与角色
    • 创建敌人角色
  • 敌人脚本
    • 检测前方是否有地面
      • 获取检测点
      • 检测地面
  • 完整代码
  • 运行结果
  • 其他文章

环境与角色

创建敌人角色

简单起见,突出脚本的内容,我们就只创建一个圆形用来当做当前的敌人角色。
为分清左右,我们再为敌人角色添加一个眼睛,新建一个圆形精灵,更改其颜色为黑色,然后使其成为Enemy的子物体,调整位置,刚刚好放在它的右边,当做眼睛。
然后关键的一个东西,新建一个GroundCheck子物体,空物体即可。后续我们要用其定位,来检测地面。这个名字最好使用GroundCheck,如果你使用了其他名字,在后续的脚本中是需要更改脚本内容的。
接下来,我们为敌人角色添加必要的组件,分别是刚体和碰撞体。
在这里插入图片描述

敌人脚本

新建一个敌人脚本,命名为Enemy,然后挂载到敌人的身上。

检测前方是否有地面

获取检测点

首先声明几个公共字段,用于存储检测点,也就是我们之前创建的GroundCheck子物体。
同时我们还要声明一个层,用于表示地面的层。
再声明一个变量,用于表示前方是否是地面。

private bool isGrounded = false;
private Transform groundCheck;
private LayerMask groundLayer;

然后再Awake方法中获取地面检测点,并且为层赋值,接下来要去编辑器中,创建一个新的层,名叫Ground的层。然后为所有的地面切换为Ground层。

private void Awake()
{groundCheck = transform.Find("GroundCheck");groundLayer = LayerMask.GetMask("Ground");
}

检测地面

接下来,我们检测敌人前方是否是地面。

我们可以使用Physics2D.OverlapCircle方法来进行检测。

该方法需要传入三个参数:

  • 参数1:用于检测的圆心位置,我们可以使用GroundCheck的位置。
  • 参数2:检测的半径大小。
  • 参数3:检测的层。只有与这个层相交的物体才会被检测到。

调用Physics2D.OverlapCircle方法后,它会返回一个Collider2D对象,用于表示与检测圆有重叠的物体。如果返回的对象不为空,说明前面有路,继续前进;如果返回的对象为空,说明前面没路了,得往回走。

当然这只是我们所使用的重载的参数啦,该方法还有很多其他重载。

将返回值赋值给isGrounded变量,然后根据其值来判断敌人的当前状态,是否往回走。

需要注意的是,这里使用了2D物理引擎来进行地面检测,所以需要确保地面对象上有相应的Collider2D组件,并设置了正确的层,即Ground层。

实现代码如下:

private void FixedUpdate()
{// 检测是否在地面上isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);
}

完整代码

using UnityEngine;public class Enemy: MonoBehaviour
{public float moveSpeed = 3f;public bool isFacingRight = true;private Rigidbody2D rb;private Transform groundCheck;private bool isGrounded = false;private float groundCheckRadius = 0.2f;private LayerMask groundLayer;private bool isMovingRight = true;private void Awake(){rb = GetComponent<Rigidbody2D>();groundCheck = transform.Find("GroundCheck");groundLayer = LayerMask.GetMask("Ground");}private void FixedUpdate(){// 检测是否在地面上isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);if (!isGrounded){// 当前没有地面,往回走Flip();}// 左右移动if (isMovingRight){rb.velocity = new Vector2(moveSpeed, rb.velocity.y);}else{rb.velocity = new Vector2(-moveSpeed, rb.velocity.y);}}private void Flip(){// 改变面朝方向isFacingRight = !isFacingRight;Vector3 newScale = transform.localScale;newScale.x = -newScale.x;transform.localScale = newScale;// 改变移动方向isMovingRight = !isMovingRight;}
}

运行结果

运行程序,可以发现敌人角色会按照左右移动,并且遇到没有地面的地方会往回走。
在这里插入图片描述

其他文章

Unity创建一个可移动的2D角色
Unity如何使用手机进行调试(真机)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/98787.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker使用数据卷挂载进行数据存储与共享

一、挂载和数据卷 在 Docker 中&#xff0c;挂载&#xff08;Mounting&#xff09;和数据卷&#xff08;Data Volumes&#xff09;是用于在容器和宿主机之间共享数据的机制。 挂载&#xff1a;将宿主机文件系统中的目录或文件与容器中的目录或文件进行关联的过程。数据卷&…

Jenkins java8安装版本安装

一、首先准备Jenkins、Jdk8、Tomcat9安装包 根据Jenkins官网介绍&#xff0c;Jenkins支持Java8的版本如下&#xff1a; 我们选择2.164版本进行安装&#xff0c;根据版本号支持输入下载地址&#xff1a;https://archives.jenkins.io/war/2.164/jenkins.war&#xff0c;进行下载…

软件测试|Python自动化测试实现的思路

Python自动化测试常用于Web应用、移动应用、桌面应用等的测试 Python自动化实现思路通常分为以下几步&#xff1a; 1. 确定自动化测试的范围和目标&#xff1a; 首先需要明确需要进行自动化测试的范围和目标&#xff0c;包括测试场景、测试用例、测试数据等。 2. 选择自动化…

【知网检索稳定】第三届社会发展与媒体传播国际学术会议(SDMC 2023)

第三届社会发展与媒体传播国际学术会议&#xff08;SDMC 2023&#xff09; 2023 3rd International Conference on Social Development and Media Communication 第三届社会发展与媒体传播国际学术会议 (SDMC 2023)将于2023年11月03-05日在中国杭州召开。会议主题主要围绕社会…

博物学欣赏

自文艺复兴以降&#xff0c;西方开启发现世界的旅程。 这些东西对于科学、地理学、考古学、探险、旅游学、博物学、绘画学、美学无疑有着至高无上的借鉴价值。我们今天出版这些图文并茂的书籍有如斯高远的志向和目标&#xff1a; 展现自然的历史风貌 呈现万物的生态原样 复现…

Unittest自动化测试框架vs Pytest自动化测试框架

引言   前面一篇文章Python单元测试框架介绍已经介绍了python单元测试框架&#xff0c;大家平时经常使用的是unittest&#xff0c;因为它比较基础&#xff0c;并且可以进行二次开发&#xff0c;如果你的开发水平很高&#xff0c;集成开发自动化测试平台也是可以的。而这篇文章…

Java作业3

1.下面代码的运行结果是&#xff08;C&#xff09; public static void main(String[] args){String s;System.out.println("s"s);}A.代码编程成功&#xff0c;并输出”s” B.代码编译成功&#xff0c;并输出”snull” C.由于String s没有初始化&#xff0c;代码不…

微信小程序 通过响应式数据控制元素class属性

我想大家照这个和我最初的目的一样 希望有和vue中v-bind:class一样方便的指令 但答案不太尽人意 这里 我们只能采用 三元运算符的形式 参考代码如下 <view class"item {{ userId item.userId ? isThisUser : }}"> </view>这里 我们判断 如果当前ite…

SSRF漏洞复现(redis)

文章目录 启动环境漏洞复现探测存活IP和端口服务计划任务反弹shell 前提条件&#xff1a; 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub 安装环境已完成&#xff0c;故此省略…

小狐狸ChatGPT付费创作系统V2.2.4独立版 +WEB端+ H5端 + 小程序端(免授权去后门弹窗)安装教程

播播资源提供的小狐狸ChatGPT付费创作系统V2.2.4相比上一版h5适配普通手机浏览器&#xff0c;gpt4的接口openai改成自定义&#xff0c;以支持更多三方接口。因绘画效果不好&#xff0c;移出绘画接口openai和replicate&#xff0c;AI参数设置处的openai改成自定义&#xff0c;pc…

Android 1.2 开发环境搭建

目录 1.2 开发环境搭建 1.JDK安装与配置 2.开发工具二选一 3.相关术语的解析 4.ADB命令行的一些指令 5.APP程序打包与安装的流程&#xff1a; 6.APP的安装过程&#xff1a; 7.本节小结 1.2 开发环境搭建 现在主流的Android开发环境有: ①Eclipse ADT SDK ②Android Stu…

如何检查Windows 11笔记本电脑电池健康状况

如果你拥有一台运行微软最新操作系统的便携式电脑&#xff0c;那么检查Windows 11笔记本电脑的电池健康状况可能很重要。 电池寿命显然是一件大事&#xff0c;无论你是在最好的商务笔记本电脑上工作&#xff0c;还是在目前市场上最好的游戏笔记本电脑上享受马拉松式的Starfiel…