50 lines
1.5 KiB
C#
50 lines
1.5 KiB
C#
using UnityEngine;
|
|
|
|
public class FPSFireManager : MonoBehaviour
|
|
{
|
|
public ImpactInfo[] ImpactElemets = new ImpactInfo[0];
|
|
public float BulletDistance = 100;
|
|
public GameObject ImpactEffect;
|
|
|
|
void Update()
|
|
{
|
|
if (Input.GetMouseButtonDown(0))
|
|
{
|
|
RaycastHit hit;
|
|
var ray = new Ray(transform.position, transform.forward);
|
|
if (Physics.Raycast(ray, out hit, BulletDistance))
|
|
{
|
|
var effect = GetImpactEffect(hit.transform.gameObject);
|
|
if (effect == null)
|
|
return;
|
|
var effectIstance = Instantiate(effect, hit.point, new Quaternion()) as GameObject;
|
|
ImpactEffect.SetActive(false);
|
|
ImpactEffect.SetActive(true);
|
|
effectIstance.transform.LookAt(hit.point + hit.normal);
|
|
Destroy(effectIstance, 4);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class ImpactInfo
|
|
{
|
|
public MaterialType.MaterialTypeEnum MaterialType;
|
|
public GameObject ImpactEffect;
|
|
}
|
|
|
|
GameObject GetImpactEffect(GameObject impactedGameObject)
|
|
{
|
|
var materialType = impactedGameObject.GetComponent<MaterialType>();
|
|
if (materialType == null)
|
|
return null;
|
|
foreach (var impactInfo in ImpactElemets)
|
|
{
|
|
if (impactInfo.MaterialType == materialType.TypeOfMaterial)
|
|
return impactInfo.ImpactEffect;
|
|
}
|
|
return null;
|
|
}
|
|
}
|