디졸브 로직 변경, 보스별로 디졸브 효과 추가

This commit is contained in:
Nam Tae Gun 2024-06-29 18:37:45 +09:00
parent 9600505116
commit da427f4ca3
12 changed files with 164 additions and 225 deletions

View File

@ -4137,11 +4137,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.x
value: 0
value: -200
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: -50
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.z
@ -6595,11 +6595,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.x
value: 0
value: 170
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: 30
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.z
@ -10755,11 +10755,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.x
value: 0
value: 100
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: 30
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.z
@ -11816,11 +11816,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.x
value: 0
value: -200
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: -120
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.z
@ -15485,11 +15485,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.x
value: 0
value: 30
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: 30
objectReference: {fileID: 0}
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
propertyPath: m_LocalPosition.z
@ -18564,11 +18564,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.x
value: 0
value: -200
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: 20
objectReference: {fileID: 0}
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
propertyPath: m_LocalPosition.z

View File

@ -1,4 +1,5 @@
using BlueWater.Interfaces;
using System.Collections;
using BlueWater.Interfaces;
using Sirenix.OdinInspector;
using UnityEngine;
@ -78,6 +79,32 @@ namespace BlueWater.Enemies.Bosses
// Methods
#region Methods
protected override IEnumerator DissolveCoroutine(float start, float end, float dissolveTime)
{
if (!IsDissolveActive)
{
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield break;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, start);
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= dissolveTime)
{
var value = Mathf.Lerp(start, end, elapsedTime / dissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
}
private void FlipVisualLook()
{

View File

@ -1,8 +1,10 @@
using BehaviorDesigner.Runtime;
using System.Collections;
using BehaviorDesigner.Runtime;
using BlueWater.Interfaces;
using Pathfinding;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.Serialization;
namespace BlueWater.Enemies.Bosses
{
@ -76,6 +78,19 @@ namespace BlueWater.Enemies.Bosses
public IAstarAI AstarAi;
protected MaterialPropertyBlock MaterialPropertyBlock;
[Title("디졸브 스폰 효과")]
[SerializeField]
protected bool IsDissolveActive = true;
[SerializeField]
protected float SpawnDissolveTime = 2f;
[SerializeField]
protected float DieDissolveTime = 1f;
// Hashes
protected static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
#endregion
@ -150,6 +165,7 @@ namespace BlueWater.Enemies.Bosses
// Abstract methods
public virtual void Initialize() { }
protected abstract IEnumerator DissolveCoroutine(float start, float end, float dissolveTime);
protected abstract void Die();

View File

@ -31,16 +31,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
public BoomBarrelData BoomBarrelData { get; private set; }
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
[Title("효과")]
[SerializeField]
private float _spawnDissolveTime = 2f;
[SerializeField]
private float _dieDissolveTime = 1f;
// Hashes
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
#endregion
@ -78,26 +68,10 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
BossHealthPoint.Initialize(true, BossData.MaxHealthPoint,
BossData.DisplayName, GhostBarrelMapController.ParticleInstanceLocation);
BossSkillController.Initialize(BossData.SkillDataList);
yield return null;
SpineController.PlayAnimation(BoomBarrelAnimation.Empty.ToString(), false);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _spawnDissolveTime)
{
if (CurrentHealthPoint == 0) yield break;
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
BehaviorTree.EnableBehavior();
HitBoxCollider.enabled = true;
@ -131,19 +105,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
//await SpineController.WaitForAnimationCompletion(dieTrack);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _dieDissolveTime)
{
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
Destroy(gameObject);
}

View File

@ -32,16 +32,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
public GhostBarrelData GhostBarrelData { get; private set; }
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
[Title("효과")]
[SerializeField]
private float _spawnDissolveTime = 2f;
[SerializeField]
private float _dieDissolveTime = 1f;
// Hashes
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
#endregion
@ -85,21 +75,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
SpineController.PlayAnimation(BoomBarrelAnimation.In.ToString(), false);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _spawnDissolveTime)
{
if (CurrentHealthPoint == 0) yield break;
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
BehaviorTree.EnableBehavior();
HitBoxCollider.enabled = true;
@ -135,19 +111,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
//await SpineController.WaitForAnimationCompletion(dieTrack);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _dieDissolveTime)
{
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
Destroy(gameObject);
}

View File

@ -31,16 +31,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
public LavaBarrelData LavaBarrelData { get; private set; }
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
[Title("효과")]
[SerializeField]
private float _spawnDissolveTime = 2f;
[SerializeField]
private float _dieDissolveTime = 1f;
// Hashes
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
#endregion
@ -79,25 +69,9 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
BossData.DisplayName, GhostBarrelMapController.ParticleInstanceLocation);
BossSkillController.Initialize(BossData.SkillDataList);
yield return null;
SpineController.PlayAnimation(BoomBarrelAnimation.Empty.ToString(), false);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _spawnDissolveTime)
{
if (CurrentHealthPoint == 0) yield break;
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
BehaviorTree.EnableBehavior();
HitBoxCollider.enabled = true;
@ -131,19 +105,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
//await SpineController.WaitForAnimationCompletion(dieTrack);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _dieDissolveTime)
{
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
Destroy(gameObject);
}

View File

@ -31,16 +31,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
public SwordBarrelData SwordBarrelData { get; private set; }
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
[Title("효과")]
[SerializeField]
private float _spawnDissolveTime = 2f;
[SerializeField]
private float _dieDissolveTime = 1f;
// Hashes
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
#endregion
@ -78,26 +68,10 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
BossHealthPoint.Initialize(true, BossData.MaxHealthPoint,
BossData.DisplayName, GhostBarrelMapController.ParticleInstanceLocation);
BossSkillController.Initialize(BossData.SkillDataList);
yield return null;
SpineController.PlayAnimation(BoomBarrelAnimation.Empty.ToString(), false);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _spawnDissolveTime)
{
if (CurrentHealthPoint == 0) yield break;
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
BehaviorTree.EnableBehavior();
HitBoxCollider.enabled = true;
@ -131,19 +105,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
//await SpineController.WaitForAnimationCompletion(dieTrack);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _dieDissolveTime)
{
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
Destroy(gameObject);
}

View File

@ -1,4 +1,5 @@
using BlueWater.Items;
using System.Collections;
using BlueWater.Items;
using BlueWater.Maps;
using Sirenix.OdinInspector;
using UnityEngine;
@ -36,23 +37,37 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros
RhinocerosData = BossData as RhinocerosData;
BossMapController = MapManager.Instance.RhinocerosMapController;
}
public override void Initialize()
{
StartCoroutine(InitializeCoroutine());
}
private IEnumerator InitializeCoroutine()
{
BossHealthPoint.Initialize(true, RhinocerosData.MaxHealthPoint,
RhinocerosData.DisplayName, BossMapController.ParticleInstanceLocation);
BossSkillController.Initialize(BossData.SkillDataList);
SetMoveSpeed(RhinocerosData.MoveSpeed);
StopMove();
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
BehaviorTree.EnableBehavior();
HitBoxCollider.enabled = true;
}
#endregion
// Methods
#region Methods
protected override void Die()
{
StartCoroutine(DieCoroutine());
}
protected override async void Die()
private IEnumerator DieCoroutine()
{
BossSkillController.StopAllCoroutine();
BehaviorTree.DisableBehavior();
@ -67,10 +82,10 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros
AnimationController.SetAnimationTrigger("isDead");
BossMapController.ClearMap(gameObject);
while (AnimationController.GetCurrentAnimationNormalizedTime() <= 1f)
{
await Awaitable.NextFrameAsync();
}
yield return new WaitUntil(() => AnimationController.GetCurrentAnimationNormalizedTime() >= 1f);
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
ItemManager.Instance.ItemDropRandomPosition(BossData.CharacterIdx, transform.position);
Destroy(gameObject);

View File

@ -7,20 +7,6 @@ namespace BlueWater.Enemies.Bosses.SandMole
{
public class MiniSandMole : SandMole
{
// Variables
#region Variables
[Title("효과")]
[SerializeField]
private float _spawnDissolveTime = 2f;
//[SerializeField]
//private float _dieDissolveTime = 1f;
// Hashes
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
#endregion
// Initialize methods
#region Initialize methods
@ -28,11 +14,6 @@ namespace BlueWater.Enemies.Bosses.SandMole
{
StartCoroutine(InitializeCoroutine());
}
#endregion
// Methods
#region Methods
private IEnumerator InitializeCoroutine()
{
@ -43,21 +24,7 @@ namespace BlueWater.Enemies.Bosses.SandMole
SetMoveSpeed(SandMoleData.MoveSpeed);
StopMove();
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= _spawnDissolveTime)
{
if (CurrentHealthPoint == 0) yield break;
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
SpineController.SetSkin(SandMoleSkin.Normal.ToString());
var isRoar = false;
@ -79,7 +46,17 @@ namespace BlueWater.Enemies.Bosses.SandMole
HitBoxCollider.enabled = true;
}
protected override async void Die()
#endregion
// Methods
#region Methods
protected override void Die()
{
StartCoroutine(DieCoroutine());
}
private IEnumerator DieCoroutine()
{
BossSkillController.StopAllCoroutine();
SandMoleStatus.StopAllCoroutine();
@ -95,8 +72,11 @@ namespace BlueWater.Enemies.Bosses.SandMole
SpineController.SetSkin(SandMoleSkin.Idle.ToString());
var dieTrack = SpineController.PlayAnimation(SandMoleAnimation.Die.ToString(), false);
yield return new WaitUntil(() => dieTrack.IsComplete);
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
await SpineController.WaitForAnimationCompletion(dieTrack);
Destroy(gameObject);
}

View File

@ -98,12 +98,7 @@ namespace BlueWater.Enemies.Bosses.SandMole
{
StartCoroutine(InitializeCoroutine());
}
#endregion
// Methods
#region Methods
private IEnumerator InitializeCoroutine()
{
HitBoxCollider.enabled = false;
@ -114,6 +109,8 @@ namespace BlueWater.Enemies.Bosses.SandMole
SetMoveSpeed(SandMoleData.MoveSpeed);
StopMove();
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
SpineController.SetSkin(SandMoleSkin.Normal.ToString());
var isCameraShakeActive = false;
var roarTrack = SpineController.PlayAnimation(SandMoleAnimation.Roar.ToString(), false);
@ -135,7 +132,17 @@ namespace BlueWater.Enemies.Bosses.SandMole
HitBoxCollider.enabled = true;
}
protected override async void Die()
#endregion
// Methods
#region Methods
protected override void Die()
{
StartCoroutine(DieCoroutine());
}
private IEnumerator DieCoroutine()
{
BossSkillController.StopAllCoroutine();
SandMoleStatus.StopAllCoroutine();
@ -152,8 +159,11 @@ namespace BlueWater.Enemies.Bosses.SandMole
SpineController.SetSkin(SandMoleSkin.Idle.ToString());
var dieTrack = SpineController.PlayAnimation(SandMoleAnimation.Die.ToString(), false);
SandMoleMapController.ClearMap(gameObject);
yield return new WaitUntil(() => dieTrack.IsComplete);
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
await SpineController.WaitForAnimationCompletion(dieTrack);
ItemManager.Instance.ItemDropRandomPosition(BossData.CharacterIdx, transform.position);
Destroy(gameObject);
}

View File

@ -1,4 +1,5 @@
using BlueWater.Interfaces;
using System.Collections;
using BlueWater.Interfaces;
using BlueWater.Players;
using Sirenix.OdinInspector;
using UnityEngine;
@ -64,6 +65,32 @@ namespace BlueWater.Enemies.Bosses
// Methods
#region Methods
protected override IEnumerator DissolveCoroutine(float start, float end, float dissolveTime)
{
if (!IsDissolveActive)
{
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
yield break;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, start);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
var elapsedTime = 0f;
while (elapsedTime <= dissolveTime)
{
var value = Mathf.Lerp(start, end, elapsedTime / dissolveTime);
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
elapsedTime += Time.deltaTime;
yield return null;
}
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
}
protected virtual void FlipVisualLook()
{

View File

@ -1,3 +1,4 @@
using System.Collections;
using BlueWater.Items;
using BlueWater.Maps;
using Sirenix.OdinInspector;
@ -40,18 +41,31 @@ namespace BlueWater.Enemies.Bosses.TitanSlime
public void Initialize(int level, bool hasRabbit)
{
StartCoroutine(InitializeCoroutine(level, hasRabbit));
}
private IEnumerator InitializeCoroutine(int level, bool hasRabbit)
{
HitBoxCollider.enabled = false;
_rabbit.enabled = false;
var titanSlimeState = TitanSlimeData.TitanSlimeState.Find(list => list.Level == level);
TitanSlimeState = new TitanSlimeState(titanSlimeState, hasRabbit);
transform.localScale = Vector3.one * TitanSlimeState.Size;
_rabbit.enabled = TitanSlimeState.HasRabbit;
MinCoolDown = TitanSlimeState.RandomCooldown.x;
MaxCoolDown = TitanSlimeState.RandomCooldown.y;
BossHealthPoint.Initialize(TitanSlimeState.HasRabbit, TitanSlimeState.MaxHp,
TitanSlimeData.DisplayName, _titanSlimeMapController.ParticleInstanceLocation);
BossSkillController.Initialize(BossData.SkillDataList);
if (TitanSlimeState.HasRabbit && titanSlimeState.Level == 1)
{
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
}
_rabbit.enabled = TitanSlimeState.HasRabbit;
BehaviorTree.EnableBehavior();
HitBoxCollider.enabled = true;
}
#endregion