zoukankan      html  css  js  c++  java
  • Unity射击实例讲解—子弹创建

    前言:

    这一篇章会介绍如何创建最基本的射击用子弹,示例用工程进度也往后推了许多,有时间会都整理了发出来,学艺尚浅有一些东西不能讲明白,后续学习深入会慢慢补足。另外自己魔改过的版本也是花钱买了一些模型,成品游戏应该会在一段时间后放出来,有兴趣的可以关注下,我之后应该会放个网盘链接,进入正题吧。

    英文翻译(重复的就不提了):

     Transform:使改变           delete:删除         prefab:预制            speed:速度         power:威力      original:原始的

    射击类游戏实例

    作为第一个用来发布讲解的游戏,我立马就想到了射击类游戏,当然不是第一人称射击的那种,是打小飞机累计得分的那种类型,方便魔改参数以及自行制作一些敌人的模型。

    游戏相关设定:

    1.在游戏中,我们将操作战舰击坠敌人的飞船,游戏开始后战舰会向前推进,消灭敌人取得分数,战舰被击落游戏才会结束。

    2.战舰拥有固定装甲(血量),敌人有多种并拥有独特的飞行轨迹与装甲

    3.屏幕上会显示血量、得分等内容

     4.待添加

    创建子弹

    介绍:

    OnBecameInvisible函数是Unity的事件函数,当可渲染的物体离开可视范围,这个函数会触发并让物体自我销毁。

    Rocket类中会包含飞行速度、生存时间和威力等参数并在脱离可视范围时自我销毁。

    1.找到子弹模型拖入游戏界面,创建子弹的游戏体

    2.创建Rocket.cs脚本,指定给子弹游戏体

    3.编写代码

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    [AddComponentMenu("MyGame/Rocket")]
    public class rocket : MonoBehaviour
    {
        public float m_speed = 10;
        public float m_power = 1.0f;
    
        private void OnTriggerEnter(Collider other)
        {
            if (other.tag != "Enemy")
            {
                return;
    
            }
            else
            {
                Destroy(this.gameObject);
            }
        }
        void OnBecameInvisible()
        {
            if (this.enabled)
            {
                Destroy(this.gameObject);
            }
    
            
        }
        // Start is called before the first frame update
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            transform.Translate(new Vector3(0, 0, m_speed * Time.deltaTime));
    
    
        }
    }

    代码中定义了子弹的威力与飞行速度之后也可以直接在层级界面修改数值,并添加了自我消化的功能,现在启动游戏会发现子弹向前飞行并在一段时间后消失。

    Prefab的创建与子弹的发射

    介绍:

    prefab可以理解为可重复使用的游戏体,简单来说就是对一个游戏体的复制粘贴,方便定义多个游戏体并且可在其他unity游戏中使用。

    想要使用prefabs中的游戏体直接拖入即可。

    Prefab Variant 继承于一个父Prefab, 父Prefab属性修改后:如果子Prefab的某些属性不动, 则父Prefab的属性影响子Prefab的属性, 如果对子Prefab的某些属性进行修改/覆盖, 则父Prefab的属性无法影响。

    1.在Assets目录新建Prefabs文件夹,将Hierachy上的rocket拖到下面来,会跳出一个提示框,选择original prefab

    2.删除原场景中的子弹游戏体

    3.将子弹游戏体与主角建立联系,打开Player.cs编写代码

    public Transform m_rocket;

    4.回到unity,选择Player游戏体,在Inspector窗口找到脚本组件将子弹prefab拖入其中的rocket选项

    5.打开Player.cs,编写代码加入Update()中

    if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
                {
                    Instantiate(m_rocket, m_transform.position, m_transform.rotation);
                }

    这里的代码应该就很明了,判断输入是否为空格或者左键,是就发射基于游戏体发射子弹。

    再说一句:

    打开游戏应该就能实现子弹的射击了,不过会发现子弹可以连续无间隔射击,加个限制就行,之后想起来再修改下,不过也是因为这个现象,可以试着做出激光武器特效,一段激光射线就是一长串连续的子弹不就很有意思了,武器的设计也可以定义出一些固定的近战用武器,定义个游戏体固定在某一处,添加物理碰撞,这边提供一些个人想法。讲解用示例不适合有过多的东西,之后会慢慢介绍花一点的玩意,最近在试着实现一些喷射特效与形态转换,我们的目标是星辰大海。

  • 相关阅读:
    3.springMVC参数绑定过程(页面向后台传参)
    2.springMVC入门程序
    1.理解springMVC的原理
    RTO
    DC Congestion Control
    docs for DC Network
    FCT和QCT
    下行TM
    上行TM
    调度与队列
  • 原文地址:https://www.cnblogs.com/zzuadj/p/14148086.html
Copyright © 2011-2022 走看看