• Unity3d 札记-Tanks Tutorial 知识点汇总---如何发射子弹


    发射子弹  需要

    1发射坐标 ----- Transform FireTransform

    2子弹  ----- GameObject Shell

    3相关大小的力  ----- float maxForce

    4最长发射时间  ----float maxChargingTime

    5蓄力槽  ------- Slider AimSlider

    6相关音效  -----AudioSource

     

     AimSlider 不需要拖动条也不需要背景

     

     通过设置FillArea 和Fill 来做出图示效果。

     Po一下代码

    using UnityEngine;
    using UnityEngine.UI;
    
    public class TankShooting : MonoBehaviour
    {
        public int m_PlayerNumber = 1;       
        public Rigidbody m_Shell;            
        public Transform m_FireTransform;    
        public Slider m_AimSlider;           
        public AudioSource m_ShootingAudio;  
        public AudioClip m_ChargingClip;     
        public AudioClip m_FireClip;         
        public float m_MinLaunchForce = 15f; 
        public float m_MaxLaunchForce = 30f; 
        public float m_MaxChargeTime = 0.75f;
    
        
        private string m_FireButton;         
        private float m_CurrentLaunchForce;  
        private float m_ChargeSpeed;         
        private bool m_Fired;                
    
    
        private void OnEnable()
        {
            m_CurrentLaunchForce = m_MinLaunchForce;
            m_AimSlider.value = m_MinLaunchForce;
        }
    
    
        private void Start()
        {
            m_FireButton = "Fire" + m_PlayerNumber;
    
            m_ChargeSpeed = (m_MaxLaunchForce - m_MinLaunchForce) / m_MaxChargeTime;
        }
        
    
        private void Update()
        {
            // Track the current state of the fire button and make decisions based on the current launch force.
            m_AimSlider.value = m_CurrentLaunchForce;
    
            if (m_CurrentLaunchForce >= m_MaxLaunchForce && !m_Fired) {
                m_CurrentLaunchForce = m_MaxLaunchForce;
                Fire ();
            } else if (Input.GetButtonDown (m_FireButton)) {
                m_Fired = false;
                m_CurrentLaunchForce = m_MinLaunchForce;
                m_ShootingAudio.clip = m_ChargingClip;
                m_ShootingAudio.Play ();
            } else if (Input.GetButton (m_FireButton) && !m_Fired) {
                m_CurrentLaunchForce += m_ChargeSpeed * Time.deltaTime;
                m_AimSlider.value = m_CurrentLaunchForce;
            } else if (Input.GetButtonUp (m_FireButton)&& !m_Fired) {
                Fire ();
            }
        }
    
    
        private void Fire()
        {
            // Set the fired flag so only Fire is only called once.
            m_Fired = true;
    
            // Create an instance of the shell and store a reference to it's rigidbody.
            Rigidbody shellInstance =
                Instantiate (m_Shell, m_FireTransform.position, m_FireTransform.rotation) as Rigidbody;
    
            // Set the shell's velocity to the launch force in the fire position's forward direction.
            shellInstance.velocity = m_CurrentLaunchForce * m_FireTransform.forward; ;
    
            // Change the clip to the firing clip and play it.
            m_ShootingAudio.clip = m_FireClip;
            m_ShootingAudio.Play ();
    
            // Reset the launch force.  This is a precaution in case of missing button events.
            m_CurrentLaunchForce = m_MinLaunchForce;
        }
    }
  • 相关阅读:
    目录:数据挖掘
    目录:工具的安装与激活
    目录:Django框架开发Web系统的功能实现过程
    Python3.5在jupyter中使用graphviz画决策树(包括graphviz-2.38.msi的安装)
    2020年全国高校计算机能力挑战赛Python程序设计初赛
    离群异常值与重复数据检测
    数据描述性统计度量方法
    数据挖掘的方法
    Nginx+uWSGI+Django部署方案的详细实现过程
    VMware的联网配置及虚拟机IP配置
  • 原文地址:https://www.cnblogs.com/dongfangliu/p/5803681.html
Copyright © 2020-2023  润新知