我想使用UI按钮射击子弹,现在它与空格键配合正常。我无法将其转换为UI按钮

问题描述 投票:0回答:1

这是从坦克资产商店获取的脚本,我想将当前由空格键进行的射击转换为Ui Shoot按钮。它应该发射子弹。就像我想要的那样,当我按下按钮时,它应该负责赋予子弹多少速度,并在我释放它后立即发射子弹。另外,我正在考虑一个填充图像,该图像也可以在按钮中显示该内容。

public class TankShooting: MonoBehaviour
{

    //public int m_PlayerNumber = 1;              // Used to identify the different players.
    public Rigidbody m_Shell;                   // Prefab of the shell.
    public Transform m_FireTransform;           // A child of the tank where the shells are spawned.
    public Slider m_AimSlider;                  // A child of the tank that displays the current launch force.
    //public AudioSource m_ShootingAudio;         // Reference to the audio source used to play the shooting audio. NB: different from the movement audio source.
    //public AudioClip m_ChargingClip;            // Audio that plays when each shot is charging up.
    //public AudioClip m_FireClip;                // Audio that plays when each shot is fired.
    public float m_MinLaunchForce = 15f;        // The force is given to the shell if the fire button is not held.
    public float m_MaxLaunchForce = 30f;        // The force is given to the shell if the fire button is held for the max charge time.
    public float m_MaxChargeTime = 0.75f;       // How long the shell can charge for before it is fired at max force.


    private string m_FireButton;                // The input axis that is used for launching shells.
    private float m_CurrentLaunchForce;         // The force that will be given to the shell when the fire button is released.
    private float m_ChargeSpeed;                // How fast the launch force increases, based on the max charge time.
    private bool m_Fired;                       // Whether or not the shell has been launched with this button press.
    private float nextFireTime;




    private void OnEnable()
    {
        // When the tank is turned on, reset the launch force and the UI
        m_CurrentLaunchForce = m_MinLaunchForce;
        m_AimSlider.value = m_MinLaunchForce;
    }


    private void Start ()
    {
        // The fire axis is based on the player number.
        m_FireButton = "Fire1"; //+ m_PlayerNumber;



        // The rate that the launch force charges up is the range of possible forces by the max charge time.
        m_ChargeSpeed = (m_MaxLaunchForce - m_MinLaunchForce) / m_MaxChargeTime;
    }


    public void Update()
    {
        // The slider should have a default value of the minimum launch force.
        m_AimSlider.value = m_MinLaunchForce;

        // If the max force has been exceeded and the shell hasn't yet been launched...
        if (m_CurrentLaunchForce >= m_MaxLaunchForce && !m_Fired)
        {
            // ... use the max force and launch the shell.
            m_CurrentLaunchForce = m_MaxLaunchForce;
            Fire (m_CurrentLaunchForce, 1);
        }
        // Otherwise, if the fire button has just started being pressed...
        else if (Input.GetButtonDown (m_FireButton))
        {
            // ... reset the fired flag and reset the launch force.
            m_Fired = false;
            m_CurrentLaunchForce = m_MinLaunchForce;

            // Change the clip to the charging clip and start it playing.
            //m_ShootingAudio.clip = m_ChargingClip;
            //m_ShootingAudio.Play ();
        }
        // Otherwise, if the fire button is being held and the shell hasn't been launched yet...
        else if (Input.GetButton (m_FireButton) && !m_Fired)
        {
            // Increment the launch force and update the slider.
            m_CurrentLaunchForce += m_ChargeSpeed * Time.deltaTime;

            m_AimSlider.value = m_CurrentLaunchForce;
        }
        // Otherwise, if the fire button is released and the shell hasn't been launched yet...
        else if (Input.GetButtonUp (m_FireButton) && !m_Fired)
        {
            // ... launch the shell.
            Fire (m_CurrentLaunchForce, 1);

        }
    }


    public void Fire (float launchForce, float fireRate)
    {
        if (Time.time > nextFireTime) 
        {
            nextFireTime = Time.time + fireRate;
            // 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;
        }

    }
}
c# visual-studio unity3d game-engine
1个回答
0
投票

有一个非常简单的解决方案:

在脚本中创建函数

ShootTheBullet()

以及在按钮的组件事件中创建UI按钮并单击添加按钮

“点击时”

从包含“ ShootTheBullet()”的Hierarchey中拖放了C#脚本的游戏对象,然后单击“右键”,选择“脚本”,然后选择“选择该功能”。

现在您可以使用UI按钮射击子弹了。

© www.soinside.com 2019 - 2024. All rights reserved.