Files
2025-06-04 16:13:32 +09:30

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;
}
}