Unity2D子弹朝向鼠标位置发射

这篇具有很好参考价值的文章主要介绍了Unity2D子弹朝向鼠标位置发射。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

废话不多说,先说明一下我使用的变量

float attack_time 用于表示每次攻击的间隙时间

float current_time 攻击时间的冷却

Rigidbody2D body 2D刚体组件

Object bomb 需要发射的物体对象

创建一枚子弹,unity的Instantiate()函数就可以实现,这里需要的三个参数是物体对象(Object),生成位置(Vector3)和旋转方向(四元数Quaternion),第一个参数就是bomb,我们需要发射的子弹类。

想要子弹沿着鼠标方向运动,还需要另外两个参数,一个是子弹生成时的初始位置,也就是玩家的位置,如果发射这个子弹的脚本是挂载在玩家上的,就用transform.position即脚本挂载的物体对象的位置。

获取鼠标位置用Input.mousePosition,然而这个返回的是鼠标在屏幕上的位置,不是我们游戏场景中的位置,需要用到Camera.main.ScreenToWorldPoint(Input.mousePosition),即返回鼠标屏幕位置对应的游戏世界坐标位置。

代码如下图:

Unity2D子弹朝向鼠标位置发射

我将其整理成了一个静态方法便于在2d场景其它也需要鼠标在游戏场景中位置是,能够方便获取。

求解2D场景中两个物体间的角度,我们需要先获得者两个物体间的向量。

由于transform.position是三维,而我需要的向量是一个二维,因此需要body.position获取物体在2D场景中的位置,当然用transform.position.x和transform.position.y来new一个Vector2类型也是可以的。不过由于我在这个脚本实现玩家移动的时候使用了刚体组件实现移动方式,所以就用的是body.position......

通过将目标点的位置减去自身的位置就得到了一个二维向量Vector2 direction,unity中有很多计算夹角的方法,这里我使用的是Vector3.SignedAngle(),该方法需要三个参数,Vector3.up, direction, Vector3.forward,Vector3.up和Vector3.forward的作用相当于建立一个x-y轴坐标系,以direction做从原点开始的向量,计算出夹角float angle。

要通过夹角设置子弹的旋转,我们不能直接修改transform.rotation,这是个四元数不是直观意义上的旋转,需要用到四元数Quaternion,该类提供了一个静态方法,Euler计算欧拉角,通过给的x,y,z计算出一个四元数,也就是我们想要的物体朝向的方向,其中在二维方向上的选择是z来控制的,因此只需要把angle放到z轴,x,y默认0。

代码实现图如下,这段代码放在Update()内实现。

Unity2D子弹朝向鼠标位置发射

由于我使用的控制子弹移动的脚本是使用了translate控制x轴移动,使得子弹会以y轴指向鼠标位置,因此我在角度设置里angle加了90度旋转.(虽然我在注释里说了)

Input.GetMouseButton(0)是如果鼠标按下了左键,就返回true,也就是设置左键攻击。

如果你忽略了attack_time的话,就会发现你点一下鼠标就会突然创建一大堆子弹,这是因为Update()是每帧执行,你一次按下鼠表就是执行很多次,所以需要设置一个attack_time然后初始化设置它的数值也就是攻击时间。current_time作为攻击间隙,初始化数值等于attack_time,然后在每次对current_time是否大于等于attack_time,如果是那么按下鼠标后在执行发射制子弹同时将current_time置0,不是则每次执行进行current_time += Time.deltaTime

这是最终的实现效果

Unity2D子弹朝向鼠标位置发射

PS:本人还是在学习中萌新,所以可能方法上略有不足......实现这种效果也是有很多其它方法的,以上仅为我的个人理解。文章来源地址https://www.toymoban.com/news/detail-497877.html

到了这里,关于Unity2D子弹朝向鼠标位置发射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Unity2D】角色动画的切换

    第一种方法是设置一个中间状态,从中间状态向其余各种状态切换,且各状态向其他状态需要设置参数 实现动作转移时右键点击Make Transition即可  实现动画转移需要设置条件 点击一种动画到另一种动画的线 ,然后点击加号添加Condition 比如机器人从向左走切换到向右走的条件

    2024年02月15日
    浏览(37)
  • Unity2D控制角色左右移动

    1.在Hierarchy一栏中选中角色; 2.在inspector栏最底端找到Add Component选项并点击; 3.添加Rigidbody2D,合适的collider和new script; 4.将添加的Rigidbody2D拖到new script中;   5.在project栏中找到新添加的C#文件并双击打开(如果还没有编辑代码的工具,推荐Vscode) 6.代码如下: using System.Nu

    2024年02月14日
    浏览(29)
  • Unity2D绘制游戏地图

    首先,我们选择我们的地图素材(由于笔者在前段时间已经进行切割,最近才开始整理这一段,所以这个是用的老素材,可能有朋友就会觉得切割前后不一致,但是思路是一样的,大家学习思路即可)  接着,我们找到右上角的Slice进行图片切割,我这边简单介绍一下这个切

    2024年02月08日
    浏览(34)
  • Unity2D小狐狸教程笔记

    下载 https://unity.cn/releases 默认显示方式 window - layout - default SampleScene : Project - 文件目录 Scene -游戏画面 asset store - 素材商店 在asset store下载素材 sunnyland shift + sapace 放大窗口 1.背景导入 每个格子16像素: Pixels Per Unit 16px 2.绘制瓷砖式地图 新建瓦片图层:左上角/右键 2D object

    2024年01月24日
    浏览(34)
  • Unity2d游戏项目--小狐狸

    (一) 在文件夹中找到back图片,并在检查器面板中将back图片的每单位像素数设置为16。 (文件所在地) (面板设置) (二) 将图片拖入到场景中 (一) 生成矩形的瓦片地图 (二) 打开平铺调色板 (三) 新建并命名为map,在原目录新建一个文件夹,用于存放你在这个瓦

    2024年02月03日
    浏览(27)
  • Unity2D学习笔记-Tilemap

    tilemap算是接触了几次,但是无论是看视频还是看文章都一知半解,这次把编辑地图的开始步骤搞清楚。 首先要知道tilemap是做什么的。 这里提到的Tilemap其实不止是Tilemap:Tilemap本身是地图编辑器(虽然我更倾向于理解为“场景”,不过编辑地图才是核心)。之前学的印象是,

    2023年04月09日
    浏览(36)
  • Unity2D-使人物翻转的方法

    方法①:使用组件: SpriteRenderer 使用 GetAxis() 和 GetAxisRaw() 没有区别 方法②:使用组件: Transform 情况1:使用 GetAxisRaw() ;没有刹车效果,及翻转过程没有过渡, m o v e F a c t o r moveFactor m o v e F a c t or 取-1,1,0 情况1:使用 GetAxis() ;有刹车效果,及翻转过程有过渡, m o v e F a c t

    2024年02月12日
    浏览(23)
  • 【Unity2D】相机移动以及设置相机边界

    添加相机时,首先需要在unity中添加 Cinemachine 包 第一次使用这个包时,需要在Package Manager中搜索并安装  安装Camera Mechine包后,添加2D Camera 设置跟随对象为Ruby (从Hierarchy中将Ruby拖动到Follow中)   同时,由于世界是有边界的,要为相机设置边界 通过添加Extension为相机添加

    2024年02月16日
    浏览(30)
  • unity2D横版游戏教程8-音效

    简单介绍一下unity audio,auido包括三个东西,分别是Aduio Listener,Audio Source,Audio Clips。Audio Listener就相当于耳朵,是用来听声音的,Audio Source就相当于播放器,一个音源,可以播放声音,具体播放什么声音就靠Audio Clips 通常Audio Listener只有一个,默认情况下Audio Listener就在Main

    2024年02月08日
    浏览(26)
  • 【Unity2d】Sprite Renderer精灵渲染器

           我们把游戏开发中的Sprite叫做精灵对象,简称精灵,就是游戏中的一个具有行为的元素。        创建精灵 (GameObject 2D Object Sprite) 时,Unity 会自动创建一个附加了 Sprite Renderer 组件的游戏对象。还可以通过 Components 菜单 (Component Rendering Sprite Renderer) 将该组件添加到

    2024年02月05日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包