【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇2(附项目源码)

简介: 【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇2(附项目源码)

本节最终效果

前言

本节就先实现添加武器,一些射击基本功能实现。

绑定人物手臂和武器

这里我找了一个人的手臂和武器动画素材

https://sketchfab.com/3d-models/cz-scorpion-evo3-a1-ultimate-fps-animations-f2bdfac775344004ad38d0318f0664a4

将他拖入到为摄像机的子集,然后调整到合适位置即可

你会发现手臂有一部分没法正常显示,那是因为默认摄像机只会投射大于0.3外的范围,所以我们需要把摄像机投射最小范围尽量改小,这里设置为0.01即可

枪准心

这里就随便画一个UI即可,放在0位置,指示准心,效果如下

射线发射子弹

新增WeaponController

public class WeaponController : MonoBehaviour
{
    public Transform shooterPoint; // 射击的位置
    public int bulletsMag = 30; // 一个弹匣子弹数量
    public int range = 100; // 武器的射程
    public int bulletLeft = 300; // 备弹

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            GunFire();
        }
    }

    ///<summary>
    /// 射击
    ///</summary>
    public void GunFire()
    {
        RaycastHit hit;
        Vector3 shootDirection = shooterPoint.forward; // 射击方向(向前)
        
        //场景显示红线,方便调试查看
        Debug.DrawRay(shooterPoint.position, shooterPoint.position + shootDirection * range, Color.red);
        
        if (Physics.Raycast(shooterPoint.position, shootDirection, out hit, range)) // 判断射击
        {
            Debug.Log(hit.transform.name + "被击中了");
        }
    }
}

挂载脚本,ShootPoint记得一定要放在摄像机0,0,0位置

效果

控制射速

public float fireRate = 0.1f;//射速
private float fireTimer;//计时器

void Update()
{
    if (Input.GetMouseButton(0) && currentBullects > 0)
    {
        GunFire();
    }
  
  //定时器
    if (fireTimer < fireRate)
    {
        fireTimer += Time.deltaTime;
    }
}

// 射击
public void GunFire()
{
    if (fireTimer < fireRate) return;
    RaycastHit hit;
    Vector3 shootDirection = shooterPoint.forward; // 射击方向(向前)

    //场景显示红线,方便调试查看
    Debug.DrawRay(shooterPoint.position, shooterPoint.position + shootDirection * range, Color.red);

    if (Physics.Raycast(shooterPoint.position, shootDirection, out hit, range)) // 判断射击
    {
        Debug.Log(hit.transform.name + "被击中了");
    }
    fireTimer = 0;
}

效果,每过0.1秒射击一次

打空一个弹夹

public int currentBullets; // 当前子弹数量

private void Start()
{
    currentBullects = bulletsMag;
}

public void GunFire()
{
    if (fireTimer < fireRate || currentBullects <= 0) return;

    //。。。
    
    currentBullects--;
}

显示子弹数

绘制简单的UI

public TextMeshProUGUI AmmoTextUI;//子弹UI

void Update()
{
    //。。。
    UpdateAmmoUI();
}

//更新子弹UI
private void UpdateAmmoUI()
{
    AmmoTextUI.text = currentBullects + "/" + bulletLeft;
}

效果

换弹

if (Input.GetKeyDown(KeyCode.R))
{
    Reload();
}

//换弹
public void Reload()
{
    if (bulletLeft <= 0) return;

    //计算需要填装的子弹数=1个弹匣子弹数-当前弹匣子弹数
    int bullectToLoad = bulletsMag - currentBullects;

    //计算备弹需扣除子弹数
    int bullectToReduce = (bulletLeft >= bullectToLoad) ? bullectToLoad : bulletLeft;

    bulletLeft -= bullectToReduce;//减少备弹数

    currentBullects += bullectToReduce;//当前子弹数增加
}

效果

源码

源码在最后一节

目录
相关文章
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
图形学
unity Camera第一人称移动
第一人称视角移动模拟通过检测用户键盘和鼠标输入,实现场景中的位置移动和视角旋转。位置移动基于W、A、S、D键控制相机前后左右移动,视角旋转通过鼠标控制上下左右观察,避免翻转并限制旋转角度。代码使用Unity的Input类和Transform方法实现这些功能,确保流畅的第一人称体验。
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
1183 2
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
798 0
|
存储 JSON 关系型数据库
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
931 0
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
615 0
|
存储 图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
752 0
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
633 0
|
图形学 容器
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版9(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版9(附带项目源码)
697 0
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版8(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版8(附带项目源码)
749 0

热门文章

最新文章