This commit is contained in:
2026-06-04 10:42:23 +07:00
parent e7e90790c9
commit 9be2242378
4166 changed files with 53005 additions and 11401 deletions

View File

@@ -0,0 +1,21 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f2c3cbc7843223841a8863bc0cf0899d, type: 3}
m_Name: CustomImpactEffect@Flaming
m_EditorClassIdentifier:
mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
size: 0.05
margin: 0.02
fadeSpeed: 0.1
alignTransform: 1
color: {r: 64, g: 0, b: 0, a: 1}
material: {fileID: 2100000, guid: 412eb1e9ca934e14cb83e53aba917e8b, type: 2}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 65e75d42901aa8245b358965d68f4975
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 83eec641694472a44b2b8a6ebf8baaf8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,79 @@
using System.Collections;
using UnityEngine;
namespace Invector.vShooter
{
[CreateAssetMenu(menuName = "Invector/Shooter/Impact Effects/New Custom ImpactEffect", fileName = "CustomImpactEffect@")]
public class vCustomImpactEffectSample : vImpactEffectBase
{
public enum Align
{
Right, Forward, UP, Left, Back, Down
}
public Mesh mesh;
public float size = 0.02f;
public float margin = 0.01f;
public float fadeSpeed = 0.1f;
public Align alignTransform;
[ColorUsage(true, true)]
public Color color;
public Material material;
public override void DoImpactEffect(Vector3 position, Quaternion rotation, GameObject sender, GameObject receiver)
{
var dir = rotation * Vector3.forward;
GameObject go = new GameObject();
go.transform.position = position + dir * margin;
switch (alignTransform)
{
case Align.Right:
go.transform.right = dir;
break;
case Align.Forward:
go.transform.forward = dir;
break;
case Align.UP:
go.transform.up = dir;
break;
case Align.Left:
go.transform.right = -dir;
break;
case Align.Back:
go.transform.forward = -dir;
break;
case Align.Down:
go.transform.up = -dir;
break;
}
var renderer = go.AddComponent<MeshRenderer>();
renderer.material = material;
renderer.material.color = color;
go.AddComponent<MeshFilter>().sharedMesh = mesh;
go.transform.localScale = Vector3.one * (size);
go.transform.SetParent(vObjectContainer.root, true);
go.AddComponent<Fade>().InitFade(renderer, fadeSpeed);
}
public class Fade : MonoBehaviour
{
public void InitFade(Renderer renderer, float fadeSpeed)
{
StartCoroutine(FadeColor(renderer, fadeSpeed));
}
IEnumerator FadeColor(Renderer renderer, float fadeSpeed)
{
float value = 0;
while (value < 1)
{
renderer.material.color = Color.Lerp(renderer.material.color, Color.clear, value);
value += fadeSpeed * Time.deltaTime;
value = Mathf.Clamp(value, 0f, 1f);
yield return null;
}
Destroy(gameObject);
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f2c3cbc7843223841a8863bc0cf0899d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,53 @@
using System.Collections.Generic;
using UnityEngine;
namespace Invector.vShooter
{
[CreateAssetMenu(menuName = "Invector/Shooter/Impact Effects/New ImpactEffect", fileName = "ImpactEffect@")]
public class vImpactEffect : vImpactEffectBase
{
public List<GameObject> decals;
public List<GameObject> hitEffects;
protected virtual GameObject GetRandomObject(List<GameObject> referenceList)
{
if (referenceList.Count > 1)
{
var index = Random.Range(0, referenceList.Count);
return referenceList[index];
}
else if (referenceList.Count == 1)
return referenceList[0];
else
return null;
}
protected virtual GameObject CreateDecal(Vector3 position, Quaternion rotation)
{
return CreateInstance(GetRandomObject(decals), position, rotation);
}
protected virtual GameObject CreateHitEffect(Vector3 position, Quaternion rotation)
{
return CreateInstance(GetRandomObject(hitEffects), position, rotation);
}
protected GameObject CreateInstance(GameObject target, Vector3 position, Quaternion rotation)
{
if (target == null) return null;
else return Instantiate(target, position, rotation);
}
public override void DoImpactEffect(Vector3 position, Quaternion rotation, GameObject sender, GameObject receiver)
{
var decal = CreateInstance(GetRandomObject(decals), position, rotation);
decal.transform.Rotate(Vector3.forward, Random.Range(0, 360), Space.Self);
var hitEffect = CreateInstance(GetRandomObject(hitEffects), position, rotation);
if (decal && receiver)
{
decal.transform.SetParent(receiver.transform, true);
}
if (hitEffect)
{
hitEffect.transform.SetParent(vObjectContainer.root, true);
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4f334876bec89dc40a58d294e54231d4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,18 @@
using UnityEngine;
namespace Invector.vShooter
{
/// <summary>
/// Base Class used to create Impact Effect
/// </summary>
public abstract class vImpactEffectBase : ScriptableObject
{
/// <summary>
/// Do Impact effect
/// </summary>
/// <param name="position">position of impact effect</param>
/// <param name="rotation">rotation of impact effect</param>
/// <param name="sender">Impact effect sender</param>
/// <param name="receiver">Impact effect receiver</param>
public abstract void DoImpactEffect(Vector3 position, Quaternion rotation, GameObject sender, GameObject receiver);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3ec1d6b3f18ce954084e292eba93fad0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: