Unity 实现鼠标左键进行射击

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

发射脚本实现思路

  1. 分析
    • 确定用户交互方式:通过鼠标左键点击发射子弹。
    • 确定子弹发射逻辑:每次点击后有一定时间间隔才能再次发射。
    • 确定子弹发射源和方向:子弹从枪口(Transform)位置发射,沿枪口方向前进。
  2. 变量设定
    • 设定子弹预制体引用:用于在游戏中实例化子弹。
    • 设定枪口位置引用:子弹从这个Transform的位置出发。
    • 设定子弹发射速率和间隔:定义子弹发射速度和两次发射之间的最小时间间隔。
  3. 事件监听与触发
    • 使用Unity的Update函数,实时检测用户的输入,即监测鼠标左键的点击事件。
    • 根据发射间隔,控制能否发射子弹,确保不会连续快速发射。
  4. 子弹发射逻辑
    • 当满足发射条件时,调用FireBullet函数。
    • 实例化子弹预制体到枪口位置,并沿枪口方向赋予初速度。
    • 设置子弹存在一段时间后自动销毁,避免占用过多内存资源。
控制发射脚本
using UnityEngine;
using UnityEngine.InputSystem;

public class ZiDanFaShe : MonoBehaviour
{
    // 公共变量声明
    public GameObject bulletPrefab; // 子弹预制体,用于在游戏中实例化子弹
    public Transform gunMuzzle; // 枪口位置,子弹将从这个Transform的位置发射
    public float bulletSpeed = 20f; // 子弹飞行速度
    public float fireRate = 0.2f; // 子弹发射间隔时间(秒)

    // 私有变量声明
    private float nextFireTime = 0f; // 下一次允许发射子弹的时间点

    // Unity的Update方法会在每一帧被调用
    void Update()
    {
        // 检查鼠标左键是否按下
        if (Input.GetMouseButtonDown(0))
        {
            // 若满足发射间隔(当前时间大于等于下一次允许发射的时间点)
            if (Time.time >= nextFireTime)
            {
                FireBullet(); // 调用发射子弹的方法
                nextFireTime = Time.time + fireRate; // 更新下一次允许发射的时间点
            }
        }
    }

    // 发射子弹的方法
    void FireBullet()
    {
        // 检查子弹预制体和枪口位置是否有效
        if (bulletPrefab != null && gunMuzzle != null)
        {
            // 实例化子弹预制体到枪口的位置,并继承枪口的旋转
            GameObject bulletInstance = Instantiate(bulletPrefab, gunMuzzle.position, gunMuzzle.rotation);

            // 获取子弹实例的刚体组件
            Rigidbody2D bulletRigidbody = bulletInstance.GetComponent<Rigidbody2D>();

            // 如果子弹实例有刚体组件,给予它一个沿着枪口方向的速度
            if (bulletRigidbody != null)
            {
                bulletRigidbody.velocity = gunMuzzle.right * bulletSpeed;
            }

            // 设置子弹在3秒后自动销毁
            Destroy(bulletInstance, 3f);
        }
    }
}

 实现脚本与方法解析

创建脚本并绑定到游戏对象
  1. 在Unity项目中创建一个新的C#脚本,命名为ZiDanFaShe,并将上述代码粘贴到其中。
  2. 将此脚本附加到游戏中需要发射子弹的游戏对象上,通常是角色的手持武器或者枪口所在的游戏对象。
设置公开变量
  1. bulletPrefab:这是一个公开的GameObject变量,需要在Unity Inspector界面中拖拽一个子弹预制体到此处。这个预制体在实际游戏中会被实例化为发射出的子弹。
  2. gunMuzzle:同样是一个公开的Transform变量,需拖拽到实际枪口位置的Transform组件。子弹将从这个位置发射出来,并继承其旋转方向。
  3. bulletSpeed:定义子弹发射出去的速度。
  4. fireRate:定义子弹发射的间隔时间,即每两次发射之间的最短时间间隔。
Update() 方法详解

Unity中的Update()方法会在每一帧都被调用。在该方法中,我们首先检查鼠标左键是否被按下:

  1. Input.GetMouseButtonDown(0):这个API会检测鼠标左键是否在当前帧被按下。这里的数字"0"代表鼠标左键。
  2. 如果鼠标左键被按下,我们会进一步检查是否达到允许发射的时间间隔:
  3. Time.time >= nextFireTime:比较当前游戏时间是否超过了上次发射后计算出的下一次允许发射的时间点。

如果满足发射条件,则调用FireBullet()方法,发射子弹,并更新下一次允许发射的时间点。

FireBullet() 方法详解
  1. Instantiate(bulletPrefab, gunMuzzle.position, gunMuzzle.rotation):通过预制体实例化一个子弹对象,放在枪口的位置,并采用枪口的旋转角度。
  2. GetComponent<Rigidbody2D>():获取实例化出来的子弹对象上的Rigidbody2D组件,以便设置它的速度。
  3. bulletRigidbody.velocity = gunMuzzle.right * bulletSpeed;:设置子弹的刚体组件速度为枪口方向乘以子弹速度。
  4. Destroy(bulletInstance, 3f);:设置子弹在3秒钟后自动销毁,这样可以防止过多子弹留在场景中造成性能损耗。

 子弹射出脚本

这个脚本非常的简单,你只需要创建一个新的脚本并不把下面的代码加进去就行

    void Update()
    {
        transform.position += transform.forward * Time.deltaTime * 15f;
    }

代码解析

主要用于更新游戏物体的位置。在每一帧(Update()函数每帧都会被调用)中,它会改变当前挂载此脚本的游戏对象的位置。

  1. transform.position: 表示当前游戏对象的三维世界坐标位置。
  2. +=: 这是一个赋值运算符,表示原位置加上后面表达式的值。
  3. transform.forward: 表示游戏对象的正前方方向向量。在Unity中,forward、right、up分别代表物体的前方、右方和上方方向。
  4. * Time.deltaTimeTime.deltaTime是上一帧到当前帧的时间差(单位为秒),用于确保移动速度不受帧率影响,保持平滑运动。将移动速度乘以deltaTime可以得到这一帧应移动的距离。
  5. * 15f: 这里的15f是一个浮点数,代表游戏对象每秒向前移动的速度(单位为米/秒)。

子弹属性 

如果你的子弹未能正常发射出去注意是否设置Rigidbody,注意不能设置Is Kinematic

unity 鼠标点击射击物体,unity,游戏引擎

当你需要有碰撞检测是你需要挂载Box Collider并勾选Is Trigger

unity 鼠标点击射击物体,unity,游戏引擎

 文章来源地址https://www.toymoban.com/news/detail-847342.html

到了这里,关于Unity 实现鼠标左键进行射击的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • unity点击场景内物体进行交互

    提示:本文展示点击事件,另有其他自行研究 前言 一、原理 二、使用步骤 1.使用前提 2.使用脚本 总结 很多情况下我们需要对场景内的物体进行交互,今天我们采用射线检测的方法进行点击。 例如:点击场景内的Cube 进行开始旋转 提示:以下是本篇文章正文内容,下面案例

    2024年02月11日
    浏览(54)
  • unity 如何使用鼠标滚轮进行物体的缩放

    当我们进行鼠标滚轮进行滑动时,会返回一个float的值, 当鼠标滚轮向前进行滑动时 返回的float值是0的,        当鼠标滚轮向后进行滑动时 返回的float值是0的   所以可以通过返回的float值来判断鼠标滑动的方向。 物体的缩放需要一个参考值 因此需要新建一个参考值

    2024年02月13日
    浏览(26)
  • Unity中鼠标控制3D物体进行拖拽

    拖拽 1 、获取3D物体在世界坐标的位置转换屏幕坐标 2、鼠标在屏幕的坐标与物体在屏幕的坐标Z轴进行拟合 3、获取3D物体与拟合出来的坐标的偏移量 4、通过向量投影得到移动坐标 5、上干货,附带手指控制,手指控制逻辑同鼠标一样 自由拖拽 自由拖拽同上不同的是 获取3D物

    2024年03月26日
    浏览(35)
  • Unity——通过点击鼠标进行场景切换

    前记 通过 点击按钮 进行场景切换请参考: unity——通过点击按钮进行场景切换_行秋的博客-CSDN博客 1.准备两个示例场景 2.点击File—Build Settings...,将场景添加到视图中,点击Build。选择文件夹进行保存。(建议将文件打包到空的文件夹)3.为场景添加Button(UI)在Hierarchy视图中

    2023年04月23日
    浏览(29)
  • 【Unity脚本开源】记录鼠标按下的位置和移动的距离来进行物体的旋转,并在鼠标释放后将物体恢复到初始旋转位置

    ♥️作者:白日参商 🤵‍♂️个人主页:白日参商主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油! 加油! 加油 🎈欢迎评论 💬点赞👍🏻 收藏 📂加关注+! 提针对这个需求,以下是示例脚本代码: ♥️作者

    2024年02月12日
    浏览(31)
  • Unity实现鼠标拖拽多物体(拖拽单物体的拓展)

    学习了B站UP主OneCredit【Unity快速教学】鼠标拖曳甩动物件BV1qK4y1d7iZ的教学视频后 拓展了一下功能,实现多个物体也可以拖拽,互不受影响 主要是做了一个检测,在鼠标上物体才能被拖拽 目录 bool Drag 拖拽物体的实现 解决摄像机视角的影响 绑定刚体,写好需要用到的变量 Dr

    2024年03月24日
    浏览(46)
  • unity3D 鼠标滚轮实现物体的大小缩放

    鼠标滚轮响应函数是Input.GetAxis(\\\"Mouse ScrollWheel\\\"),函数返回值类型是float,向前滚是返回正数,向后滚是返回负数,且鼠标滚轮滑动单次函数返回值为0.1 利用返回值修改模型transform.localscale,实现模型缩放 鼠标滚轮一直向后滚,会看见模型逐渐变小,当变到很小到消失的时候,

    2024年02月08日
    浏览(50)
  • unity2d里实现鼠标拖拽物体的功能

    在 Unity 中实现鼠标拖拽物体的功能需要使用到 Unity 的 Physics 系统。 要实现鼠标拖拽物体,你需要在场景中添加以下内容: 一个 Rigidbody 2D 组件,用于控制物体的运动。 一个 Box Collider 2D 组件,用于检测鼠标与物体的碰撞。 一个脚本,用于监听鼠标的输入,并在鼠标按下时拖

    2024年02月11日
    浏览(31)
  • 逆向大漠插件/用VB6.0实现后台鼠标移动和后台鼠标左键点击

    自动化设计软件,在一款做门的设计软件CypCut6.3 上实现了自动化勾选了 复选框。一切都是基于后台的。 Private Const GW_CHILD = 5 Private Const GW_HWNDFIRST = 0 Private Const GW_HWNDNEXT = 2 Public Declare Function FindWindow Lib \\\"user32\\\" Alias \\\"FindWindowA\\\" (ByVal lpClassName As String, ByVal lpWindowName As String) As Lon

    2024年02月07日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包