You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.5 KiB
C#
45 lines
1.5 KiB
C#
6 months ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace Autohand.Demo{
|
||
|
public class Pistol : MonoBehaviour
|
||
|
{
|
||
|
public Rigidbody body;
|
||
|
|
||
|
public Transform barrelTip;
|
||
|
public float hitPower = 1;
|
||
|
public float recoilPower = 1;
|
||
|
public float range = 100;
|
||
|
public LayerMask layer;
|
||
|
|
||
|
public AudioClip shootSound;
|
||
|
public float shootVolume = 1f;
|
||
|
|
||
|
private void Start() {
|
||
|
if(body == null && GetComponent<Rigidbody>() != null)
|
||
|
body = GetComponent<Rigidbody>();
|
||
|
}
|
||
|
|
||
|
public void Shoot() {
|
||
|
//Play the audio sound
|
||
|
if(shootSound)
|
||
|
AudioSource.PlayClipAtPoint(shootSound, transform.position, shootVolume);
|
||
|
|
||
|
RaycastHit hit;
|
||
|
if(Physics.Raycast(barrelTip.position, barrelTip.forward, out hit, range, layer)){
|
||
|
var hitBody = hit.transform.GetComponent<Rigidbody>();
|
||
|
if(hitBody != null) {
|
||
|
Debug.DrawRay(barrelTip.position, (hit.point - barrelTip.position), Color.green, 5);
|
||
|
hitBody.GetComponent<Smash>()?.DoSmash();
|
||
|
hitBody.AddForceAtPosition((hit.point - barrelTip.position).normalized*hitPower*10, hit.point, ForceMode.Impulse);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
Debug.DrawRay(barrelTip.position, barrelTip.forward*range, Color.red, 1);
|
||
|
|
||
|
body.AddForce(barrelTip.transform.up*recoilPower*5, ForceMode.Impulse);
|
||
|
}
|
||
|
}
|
||
|
}
|