c#语言使用Unity粒子系统制作手雷爆炸

 更新时间:2022年04月25日 17:46:43   作者:极客范儿  
这篇文章主要为大家介绍了Unity的粒子系统由粒子发射器、粒子动画器、粒子渲染器组成,通过使用一或两个纹理多次绘制,创造一个混沌的效果,通过复习粒子系统做一个手雷和实弹投掷现场

一、创建地形

1、GameObject ->3D Object-> Terrain,创建带有地形属性的平面

2、Terrain-〉最后一个工具(Terrain Settings)->Set Resolution-〉SetHeightmap resolution ,把地形设置为500*500

3、调整视图

  • Hierarchy->Camera,选择默认的摄像机
  • Hierarchy->Camera->Inspector->Position->X=250,Y=100,Z=-250, Game中能看到一个梯形状的平面(以后随时调整XYZ值得到最佳效果)

4、设置地形高度

SetHeight

Height->200

5、设置地形背景

二、应用资源包

1、下载资源

从unity官网中下载好所需要的资源包

“Third Person Controller - Basic Locomotion FREE.unitypackage”

“Environment Pack Free Forest Sample.unitypackage”

2、导入资源

Assets->Import Package->Custom Package->依次选中Package包

3、Project ->All Prefabs->将显示人像的ThirdPersonController_LITE预制件拖拉到Scene窗口中的地面上(参数可以选用默认值),同时将与ThirdPersonController_LITE相隔3个的vThirdPersonCamera_LITE预制件拖拉到Scene窗口中(该预制件能跟踪人体的运动,替代默认的Camera)。

4、选中Hierarchy-〉Untitled->Main Camera,在Inspector下的Main Camera左边的小框中的勾选去掉,让Main Camera失效。

三、制作手雷

1、导入SceneShot.unitypackage

2、将Grenade置入场景中

3、Collisions.cs脚本程序(1) //拖拽到ThirdPersonController_LITE上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Collisions : MonoBehaviour
{
    public static int GRENADE_AMMO = 0;
    // Start is called before the first frame update
    void Start()
    {
    }
    // Update is called once per frame
    void Update()
    { 
        RaycastHit hit;
        //check if we are collidering
        float rayCastLength = 5;
        Vector3 offset = new Vector3(0,0.5f,0);
        if (Physics.Raycast(transform.position+offset, transform.forward,out hit ,rayCastLength ))
        {
            //...with a door
            if (hit.collider.gameObject.tag == "Door")
            {
                //open the door
                hit.collider.gameObject.GetComponent<Animation>().Play("Door-open");    
            }
        }
        Debug.DrawRay(transform.position + offset, transform.forward, Color.red);
    }
    void OnTriggerEnter(Collider hit)
    {
        if (hit.gameObject.tag == "CrateGrenades")
        {
            Debug.Log("hit");
            //destory the ammo box
            Destroy(hit.gameObject);
            //add ammo to inventory
            GRENADE_AMMO += 200;
            print("YOU NOW HAVE " + GRENADE_AMMO + " GRENADES");
        }
    }
}

在这里插入图片描述

4、Shooting.cs脚本程序 //拖拽到ThirdPersonController_LITE上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shooting : MonoBehaviour
{
    // Start is called before the first frame update
    float  speed = 3;
    Vector3 offset = new Vector3(0, 1.0f, 0f);
    [Tooltip("gp")]
    public GameObject GrenadePrefab;
    void Start()
    {
    }
    // Update is called once per frame
    void Update()
    {
        Screen.lockCursor = true;
        //find out if a fire button is pressed
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("shoot");
            if (Collisions.GRENADE_AMMO > 0)
            {
                //create the prefab
                    GameObject grenade = Instantiate(GrenadePrefab, this.transform.localPosition+ offset+ transform.forward, Quaternion.identity);
                //add force to the prefab
                grenade.GetComponent<Rigidbody>().AddForce(transform.forward * 20, ForceMode.Impulse);
                Collisions.GRENADE_AMMO--;
                print("YOU NOW HAVE " + Collisions.GRENADE_AMMO + " GRENADES");
            }
        }
    }
}

5、GrenadeScript.cs脚本程序 //将脚本拖拽到grenade预制体上

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GrenadeScript:MonoBehaviour
{
    private float creationTime;
    public GameObject explosionPrefab;
    int lifetime = 3;
    // Start is called before the first frame update
    void Start()
    {
    }
    void Awake()
    {
        Debug.Log("count");
        creationTime = Time.time;
    }
    // Update is called once per frame
    void Update()
    {
        if (Time.time > (creationTime + lifetime))
        {
            //Destroy(this.gameObject);
            Instantiate(explosionPrefab, transform.position, Quaternion.identity);
        }
    }
}

6、在当前工程文件的Assets目录下,建一个Audio文件夹,将手榴弹爆炸音效文件Grenade.mp3,拷贝到Audio文件夹中

点击Project->Assets->Audio->Grenade音乐文件,在Inspector面板最下方有一个运行按钮(右下方的Grenade栏右边的箭头),可以倾听音效

Project-〉Prefabs-〉explosion- >在Inspector中点击Add Component ->Audio->Audio Source,在Inspector中的Audio Source下有AudioClip,

选Grenade音乐组件单击Hierarchy-〉vThirdPersonCamera_LITE,查看Inspector面板上的组件属性,Audio Listener起到在游戏运行时侦听场景中的音乐效果

运行,按键盘的左健,发射手榴弹,手榴弹落地后消失,在产生火焰爆炸特效的同时,可以侦听到手榴弹爆炸的声音特效

在这里插入图片描述

在这里插入图片描述

7、最终效果

在这里插入图片描述

以上就是c#语言使用Unity粒子系统制作手雷爆炸的详细内容,更多关于Unity粒子系统制作手雷爆炸的资料请关注脚本之家其它相关文章!

相关文章

  • C# 6.0 新特性汇总

    C# 6.0 新特性汇总

    这篇文章主要介绍了C# 6.0 新特性汇总的相关资料,本文给大家带来了11种新特征,非常不错,感兴趣的朋友一起看看吧
    2016-09-09
  • C#实现实时监控文件夹变化

    C#实现实时监控文件夹变化

    在开发各种应用程序时,我们经常需要对文件系统中的文件或文件夹进行实时监测,下面就跟随小编一起来看看具体如何使用C#实现这一功能吧
    2024-03-03
  • C# Datatable的几种用法小结

    C# Datatable的几种用法小结

    这篇文章主要介绍了C# Datatable的几种用法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 使用 C# 下载文件的多种方法小结

    使用 C# 下载文件的多种方法小结

    本文从最简单的下载方式开始步步递进,讲述了文件下载过程中的常见问题并给出了解决方案。并展示了如何使用多线程提升 HTTP 的下载速度以及调用 aria2 实现非 HTTP 协议的文件下载,对C# 下载文件相关知识感兴趣的朋友一起看看吧
    2021-08-08
  • 基于DateTime.ParseExact方法的使用详解

    基于DateTime.ParseExact方法的使用详解

    本篇文章是对DateTime.ParseExact方法的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • c#异步操作async await状态机的总结(推荐)

    c#异步操作async await状态机的总结(推荐)

    这篇文章主要介绍了c#异步操作async await状态机的总结,关于async和await每个人都有自己的理解,甚至关于异步和同步亦或者关于异步和多线程每个人也都有自己的理解,本文通过实例代码详细讲解,需要的朋友可以参考下
    2023-02-02
  • C#中线程同步对象的方法分析

    C#中线程同步对象的方法分析

    这篇文章主要介绍了C#中线程同步对象的方法,较为详细的分析了线程同步的原理与实现方法,并给出了实例总结,是比较实用的技巧,需要的朋友可以参考下
    2014-12-12
  • c#使用win32api实现获取光标位置

    c#使用win32api实现获取光标位置

    本文给大家汇总了2个使用C#实现获取光标位置的代码,非常的简单实用,第二种方法更为全面,推荐给大家。
    2016-02-02
  • C#异步原理详情

    C#异步原理详情

    这篇文章主要介绍了C#异步原理,C#异步在C#5便发布了,是利用async关键字和await表达式表达的异步操作,下面文章下边将详细向大家介绍C#异步原理,感兴趣得小伙伴可以参考一下
    2021-10-10
  • C# 使用Free Spire.Presentation 实现对PPT插入、编辑、删除表格

    C# 使用Free Spire.Presentation 实现对PPT插入、编辑、删除表格

    小编发现使用.NET组件——Free Spire.Presentation,在C#中添加该产品DLL文件,可以简单快速地实现对演示文稿的表格插入、编辑和删除等操作,具体实现代码大家参考下本文吧
    2017-09-09

最新评论