您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
78 行
2.5 KiB
78 行
2.5 KiB
using UnityEngine;
|
|
using System;
|
|
using UnityEngine.Profiling;
|
|
|
|
public class SpatialEffectInstance : MonoBehaviour
|
|
{
|
|
[Serializable]
|
|
public class ShockwaveSettings
|
|
{
|
|
public bool enabled;
|
|
public float force = 7;
|
|
public float radius = 5;
|
|
public float upwardsModifier = 0.0f;
|
|
public ForceMode mode = ForceMode.Impulse;
|
|
}
|
|
|
|
public ShockwaveSettings shockwave;
|
|
public SoundDef sound;
|
|
public ParticleSystem particles;
|
|
|
|
public void StartEffect(Vector3 position,Quaternion rotation)
|
|
{
|
|
Profiler.BeginSample("SpatialEffectInstance.Start");
|
|
|
|
transform.position = position;
|
|
transform.rotation = rotation;
|
|
|
|
if (sound != null)
|
|
Game.SoundSystem.Play(sound, transform.position);
|
|
|
|
if(particles != null)
|
|
particles.Play();
|
|
|
|
if (shockwave.enabled)
|
|
{
|
|
var layer = LayerMask.NameToLayer("Debris");
|
|
var mask = 1 << layer;
|
|
var explosionCenter = position + UnityEngine.Random.insideUnitSphere * 0.2f;
|
|
var colliders = Physics.OverlapSphere(position,shockwave.radius,mask);
|
|
for (var i = 0; i < colliders.Length; i++)
|
|
{
|
|
var rigidBody = colliders[i].gameObject.GetComponent<Rigidbody>();
|
|
if (rigidBody != null)
|
|
{
|
|
rigidBody.AddExplosionForce(shockwave.force,explosionCenter,shockwave.radius, shockwave.upwardsModifier, shockwave.mode);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
var hdpipe = RenderPipelineManager.currentPipeline as UnityEngine.Experimental.Rendering.HDPipeline.HDRenderPipeline;
|
|
if (hdpipe != null)
|
|
{
|
|
var matholder = GetComponent<DecalHolder>();
|
|
if (matholder != null)
|
|
{
|
|
var ds = UnityEngine.Experimental.Rendering.HDPipeline.DecalSystem.instance;
|
|
var go = new GameObject();
|
|
go.transform.rotation = effectEvent.rotation;
|
|
go.transform.position = effectEvent.position;
|
|
go.transform.Translate(-0.5f, 0, 0, Space.Self);
|
|
go.transform.up = go.transform.right;
|
|
var d = go.AddComponent<UnityEngine.Experimental.Rendering.HDPipeline.DecalProjectorComponent>();
|
|
d.m_Material = matholder.mat;
|
|
ds.AddDecal(d);
|
|
}
|
|
}
|
|
*/
|
|
|
|
Profiler.EndSample();
|
|
}
|
|
|
|
public void CancelEffect()
|
|
{
|
|
particles.Stop();
|
|
}
|
|
}
|