Сила заряда, снятая при удерживании кнопки мыши - PullRequest
0 голосов
/ 07 мая 2019

У меня есть скрипт, который запускает линейный переводчик из начальной и конечной позиции с каждым кликом.Я хочу, чтобы линейный рендер был постоянным до тех пор, пока не отпущена кнопка мыши.Как зарядка.Что мне нужно добавить в сценарий, чтобы это произошло?

using System.Collections;

using System.Collections.Generic;using UnityEngine;

открытый класс RayCastShot: MonoBehaviour {

public float fireRate = 0.25f;
public float weaponRange = 50f;
public float hitForce = 100f;
public Transform gunEndLeft;
public Transform gunEndRight;


private Camera fpsCam;
private WaitForSeconds shotDuration = new WaitForSeconds(0.07f);
private LineRenderer lineRenderer;
private float nextFire;

public Material mat1;
public Material mat2;




void Start()
{
    lineRenderer = GetComponent<LineRenderer>();
    fpsCam = GetComponent<Camera>();


}


void Update()
{

    if (Input.GetButtonDown("Fire1") && Time.time > nextFire)
    {
        nextFire = Time.time + fireRate;

        StartCoroutine(ShotEffect());

        Vector3 rayOrigin = fpsCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0.0f));

        RaycastHit hit;

        lineRenderer.SetPosition(0, gunEndLeft.position);

        lineRenderer.material = mat1;




        if (Physics.Raycast(rayOrigin, fpsCam.transform.forward, out hit, weaponRange))
        {
            lineRenderer.SetPosition(1, hit.point);

            //get reference to hit point
        }

        if(hit.rigidbody !=null)
        {
            hit.rigidbody.AddForce(-hit.normal * hitForce);
        }

        else
        {
            lineRenderer.SetPosition(1, rayOrigin + (fpsCam.transform.forward * weaponRange));
        }
    }




    if (Input.GetButtonDown("Fire2") && Time.time > nextFire)
    {
        nextFire = Time.time + fireRate;

        StartCoroutine(ShotEffect());

        Vector3 rayOrigin = fpsCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0.0f));

        RaycastHit hit;

        lineRenderer.SetPosition(0, gunEndRight.position);

        lineRenderer.material = mat2;

        //lineRenderer.material = new Material(Shader.Find("Particles/Priority Additive"));







        if (Physics.Raycast(rayOrigin, fpsCam.transform.forward, out hit, weaponRange))
        {
            lineRenderer.SetPosition(1, hit.point);

            //get reference to hit point
        }

        if (hit.rigidbody != null)
        {
            hit.rigidbody.AddForce(-hit.normal * hitForce);
        }

        else
        {
            lineRenderer.SetPosition(1, rayOrigin + (fpsCam.transform.forward * weaponRange));
        }
    }




}

private IEnumerator ShotEffect()
{
    lineRenderer.enabled = true;

    yield return shotDuration;

    lineRenderer.enabled = false;
}

}

1 Ответ

0 голосов
/ 07 мая 2019

Ну, вы можете начать использовать Input.GetButtonUp, чтобы остановить огонь. Таким образом, вы можете начать с Input.GetButtonDown и останавливаться только при включении кнопки. Если вам нужно выполнить код для каждого кадра, вы также можете использовать Input.GetButton.

Это основная идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...