当前位置:   article > 正文

用Unity做第一人称射击游戏_unity制作射击游戏

unity制作射击游戏

文章目录


忘记更新了…这段时间有点忙 之后再更新吧
教程晚点更新 先上个成品视频给大家看看
https://www.bilibili.com/video/BV1P54y1C7zm/

场景搭建

先创建一个地面,然后设置其材质,
我们可以在材质这里的Tiling选择6x6表示平铺成6个
在这里插入图片描述
为其创建一个材质
在这里插入图片描述
按住v有助于方便对齐

在这里插入图片描述
利用下载的资源中搭建一个场景
在这里插入图片描述
为了使其更有层次,我们将所有场景物体
在这里插入图片描述
拖拽到空物体并为其附上静态的属性

然后进行烘培
烘焙好后如图所示
在这里插入图片描述

然后利用所给的资源建立左下角所示的枪的ui

在这里插入图片描述
在标签那一栏为层次添加ignore bullet的层的组件

在这里插入图片描述
然后把这一栏点选掉,这样就可以使得子弹不对不需要的物体产生作用

接下来我们通过脚本来控制游戏:
在这里插入图片描述

因为很多游戏的脚本都会影响UI,比如说替换武器,或者说被敌人击中
所以我们需要其他的脚本方便和HUD进行沟通

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HUD : MonoBehaviour
{
    private static HUD instance;
    public static HUD GetInstance() { return instance; }
    private void Awake()
    {
        instance = this;
    }
    public Image weaponIcon;
    public Text bulletNum;
    public Text hpNum;
    public void UpdateWeaponUI(Sprite icon,int bullte_num)
    {
        weaponIcon.sprite = icon;
        bulletNum.text = bulletNum.ToString();
    }
    public void UpdateHpUI(int hp_num)
    {
        hpNum.text = hp_num.ToString();
    }
    // Start is called before the first frame update

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

将这个组件拖拽给UI并为其赋值
在这里插入图片描述

不需要和子弹发生碰撞的物体设置为
在这里插入图片描述

在这里插入图片描述
选中这个 处于这一层的物体 互相都不会进行碰撞检测了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 用来更新子弹和血量的数量
/// </summary>
public class HUD : MonoBehaviour
{
    private static HUD instance;
    public static HUD GetInstance() { return instance; }
    private void Awake()
    {
        instance = this;
    }
    public Image weaponIcon;
    public Text bulletNum;
    public Text hpNum;
    public void UpdateWeaponUI(Sprite icon,int bullet_num)
    {
        weaponIcon.sprite = icon;
        bulletNum.text = bullet_num.ToString();
    }
    public void UpdateHpUI(int hp_num)
    {
        hpNum.text = hp_num.ToString();
    }
    // Start is called before the first frame update

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

在这里插入图片描述
需要两个层:

在这里插入图片描述
在这里插入图片描述
开火的时候,上半身要有shoot的动作,但是下半身还是要有走路的状态,因此需要设置mask,并且权重设置为一。
在这里插入图片描述
为了能在idle和shoot状态间切换,添加一个bool参数shoot,用状态机脚本idle控制:
在这里插入图片描述
我们需要实现,当shoot完一次后自动进入idle状态,所以也就是说,当进入shoot状态时,需要把shoot参数设置为false:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Idle : StateMachineBehaviour
{
    public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo)
    {
        animator.SetBool("Shoot", false);
    }
    
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

由于具有骨骼动画,所以需要把枪放在人体骨骼手的结点下

为了产生开火效果的提示,可以在开火动画产生后坐力的时候添加一个事件:
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/90739
推荐阅读
相关标签
  

闽ICP备14008679号