CapersProject/Assets/AllIn1VfxToolkit/Demo & Assets/Demo/Scripts/AllIn1DemoProjectile.cs
SweetJJuya 11bc3b60ca 임시
2025-02-10 14:47:48 +09:00

51 lines
1.9 KiB
C#

using UnityEngine;
namespace AllIn1VfxToolkit.Demo.Scripts
{
public class AllIn1DemoProjectile : MonoBehaviour
{
[SerializeField] private float inaccurateAmount = 0.05f;
private GameObject currentImpactPrefab;
private Transform currentHierarchyParent;
private bool doImpactSpawn;
private bool doShake = false;
private float shakeAmountOnImpact, impactScaleSize;
public void Initialize(Transform hierarchyParent, Vector3 projectileDir, float speed, GameObject impactPrefab, float impactScaleSize)
{
currentHierarchyParent = hierarchyParent;
currentImpactPrefab = impactPrefab;
doImpactSpawn = currentImpactPrefab != null;
this.impactScaleSize = impactScaleSize;
ApplyPrecisionOffsetToProjectileDir(ref projectileDir);
GetComponent<Rigidbody>().linearVelocity = projectileDir * speed;
}
public void AddScreenShakeOnImpact(float projectileImpactShakeAmount)
{
doShake = true;
shakeAmountOnImpact = projectileImpactShakeAmount;
}
private void ApplyPrecisionOffsetToProjectileDir(ref Vector3 projectileDir)
{
projectileDir.x += Random.Range(-inaccurateAmount, inaccurateAmount);
projectileDir.y += Random.Range(-inaccurateAmount, inaccurateAmount);
projectileDir.z += Random.Range(-inaccurateAmount, inaccurateAmount);
}
private void OnTriggerEnter(Collider other)
{
if(doImpactSpawn)
{
Transform t = Instantiate(currentImpactPrefab, transform.position, Quaternion.identity).transform;
t.parent = currentHierarchyParent;
t.localScale *= impactScaleSize;
}
if(doShake) AllIn1Shaker.i.DoCameraShake(shakeAmountOnImpact);
Destroy(gameObject);
}
}
}