简体   繁体   中英

Unity C# How to make aiming bool = true, when public void Aim() is active

Here is the code for the weapon

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

public class WeaponInfo : MonoBehaviour
{
    [SerializeField] private Weapon weapon;
    [SerializeField] private Transform muzzle;
    [Header("Transform")]
    public Transform playerCamera;
    public Transform DefaultWeaponPos;
    public Transform ADSWeaponPos;
    AudioSource shootingSound;
    [SerializeField] private AudioClip[] pistolClips = default;
    private float timeSinceLastShot = 0f;
    [HideInInspector] public bool aiming = false;
    private void Start()
    {
        shootingSound = GetComponent<AudioSource>();
        Player.shootInput += Shoot;
        Player.reloadInput += StartReload;
        Player.aimInput += Aim;
        aiming = Player.shootInput != null;
    }

    public void StartReload()
    {
        if (!weapon.reloading)
            StartCoroutine(Reload());
    }

    private IEnumerator Reload()
    {
        weapon.reloading = true;
        shootingSound.PlayOneShot(pistolClips[2]);
        yield return new WaitForSeconds(weapon.reloadTime);
        weapon.currentAmmo = weapon.magSize;
        weapon.reloading = false;
    }

    public void Aim()
    {
        aiming = true;
    }

    private bool CanShoot() => !weapon.reloading && timeSinceLastShot > 1f / (weapon.fireRate / 60f);
    public void Shoot()
    {
        if(weapon.currentAmmo > 0)
        {
            if (CanShoot())
            {
                if (Physics.Raycast(playerCamera.position, playerCamera.forward, out RaycastHit hitInfo, weapon.maxDistance))
                {
                    Debug.DrawLine(playerCamera.transform.position, hitInfo.point, Color.red, 10f);
                    print(hitInfo.transform.name);
                }
                shootingSound.PlayOneShot(pistolClips[0]);
                weapon.currentAmmo--;
                timeSinceLastShot = 0;
                OnGunShot();
            }
        } else if (!weapon.reloading) shootingSound.PlayOneShot(pistolClips[1]);

    }
    private void Update()
    {
        timeSinceLastShot += Time.deltaTime;
        Debug.DrawRay(playerCamera.position, playerCamera.forward);
        transform.position = aiming ? ADSWeaponPos.position : DefaultWeaponPos.position;
    }
    private void OnGunShot()
    {

    }
}

Basically what I want is to make it so that when the player is Aiming it changes the weapon position to ADS, but when the player is not aiming it changes it back. I tried to make it so that when aiming = Aim,= null but it didnt work, I also tried other methods but I dont know what to do since I tried looking for a solution but didnt find any

And here's the code for invoking the method in the Player Script

 if (Input.GetKey(aimKey))
        {
            aimInput?.Invoke();
        }

The aimInput is a public static Action

I figured it out I just need to create another method called sideAimInput in the player, and it makes it set to aiming = false in the weaponInfo script

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM