#17 모래두더지 가시 일제 사격 스킬(GateOfSpike) 추가

+ 고정된 싸이클의 BehaviorTree로 변경
+ ProjectileController로직을 SphereCast -> OverlapSphereNonAlloc으로 변경
+ GateOfSpikes 관련 파티클 추가
+ GateOfSpike 클래스는 단일 오브젝트 컨트롤러
This commit is contained in:
Nam Tae Gun 2024-06-15 08:37:41 +09:00
parent cc382747f0
commit d27ac0918b
24 changed files with 5696 additions and 65 deletions

View File

@ -29,8 +29,8 @@ namespace BlueWater
[Title("충돌체 설정")]
[SerializeField, Tooltip("Sphere Collider가 없는 경우, 기본 충돌 크기(반지름)"), ShowIf("@!_sphereCollider")]
private float _colliderRadius = 1f;
[SerializeField, Range(0f, 1f), Tooltip("타겟보다 해당 값만큼 떨어진 위치에서 충돌")]
private float _collideOffset;
// [SerializeField, Range(0f, 1f), Tooltip("타겟보다 해당 값만큼 떨어진 위치에서 충돌")]
// private float _collideOffset;
[SerializeField]
private int _attackDamage;
@ -43,23 +43,29 @@ namespace BlueWater
[SerializeField, ShowIf("@_useAutoDestroy")]
private float _autoDestroyTime = 10f;
public float SphereRadius { get; private set; }
private float _detectionDistance;
private Collider[] _hitColliders;
public Action OnHitAction;
private void OnDrawGizmosSelected()
{
var radius = _sphereCollider ? _sphereCollider.radius : _colliderRadius;
if (SphereRadius == 0f) return;
var direction = _rigidbody ? _rigidbody.linearVelocity.normalized : transform.forward;
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, radius);
Gizmos.DrawWireSphere(transform.position, SphereRadius);
Gizmos.DrawLine(transform.position, transform.position + direction * _detectionDistance);
}
private void Start()
{
SphereRadius = _sphereCollider ? _sphereCollider.radius : _colliderRadius;
_hitColliders = new Collider[1];
if (_useAutoDestroy)
{
Destroy(gameObject, _autoDestroyTime);
@ -83,15 +89,15 @@ namespace BlueWater
{
transform.rotation = Quaternion.LookRotation(_rigidbody.linearVelocity);
}
var radius = _sphereCollider ? _sphereCollider.radius : _colliderRadius;
var direction = _rigidbody.linearVelocity.normalized;
//var direction = _rigidbody.linearVelocity.normalized;
_detectionDistance = _rigidbody.linearVelocity.magnitude * Time.deltaTime;
if (!Physics.SphereCast(transform.position, radius, direction, out var raycastHit, _detectionDistance,
_targetLayer, QueryTriggerInteraction.Collide)) return;
var hitCount = Physics.OverlapSphereNonAlloc(transform.position, SphereRadius, _hitColliders, _targetLayer, QueryTriggerInteraction.Collide);
if (hitCount == 0) return;
transform.position = raycastHit.point + raycastHit.normal * _collideOffset;
// transform.position = raycastHit.point + raycastHit.normal * _collideOffset;
var hitCollider = _hitColliders[0];
var trailParticles = GetComponentsInChildren<ParticleSystem>();
foreach (var element in trailParticles)
{
@ -101,13 +107,11 @@ namespace BlueWater
Destroy(element.gameObject, 2f);
}
GameObject impactParticle = null;
var impactParticle = Instantiate(ImpactParticle, transform.position, Quaternion.identity);
// TODO : HitBox가 레이어로 설정되어있으도, 부모 객체 Player를 계속 가져오는 버그가 있음
var hitTransform = raycastHit.transform;
var iDamageable = hitTransform.GetComponentInParent<IDamageable>();
var iDamageable = hitCollider.GetComponentInParent<IDamageable>();
if (iDamageable != null && iDamageable.CanDamage())
{
impactParticle = Instantiate(ImpactParticle, transform.position, Quaternion.FromToRotation(Vector3.up, raycastHit.normal));
iDamageable.TakeDamage(_attackDamage);
OnHitAction?.Invoke();
}

View File

@ -0,0 +1,123 @@
using System.Collections;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.Rendering.Universal;
namespace BlueWater
{
public class GateOfSpike : MonoBehaviour
{
[Title("컴포넌트")]
[SerializeField, Required]
private ProjectileController _projectileObject;
[SerializeField, Required]
private Rigidbody _rigidbody;
[SerializeField, Required]
private SphereCollider _sphereCollider;
[SerializeField, Required]
private DecalProjector _indicator;
[Title("표시기 설정")]
[SerializeField]
private bool _isUsingIndicator = true;
[Title("설정")]
[SerializeField]
private float _maxHeight = 10f;
[SerializeField]
private Vector2 _randomDuration = new(1f, 1.5f);
private bool _isInitialized;
private Vector3 _destination;
// Hashes
private static readonly int _fillHash = Shader.PropertyToID("_Fill");
private IEnumerator Start()
{
yield return new WaitUntil(() => _isInitialized);
BasicSetting();
ShowIndicator();
var startPosition = transform.position;
var controlPoint = startPosition + Vector3.up * _maxHeight;
var elapsedTime = 0f;
var duration = Random.Range(_randomDuration.x, _randomDuration.y);
while (elapsedTime < duration)
{
if (!_projectileObject)
{
HideIndicator();
Destroy(gameObject, 3.5f);
yield break;
}
elapsedTime += Time.deltaTime;
var t = elapsedTime / duration;
if (_isUsingIndicator && _indicator)
{
var fillValue = Mathf.Lerp(0f, 1f, t);
if (t == 0f)
{
fillValue = 0f;
}
_indicator.material.SetFloat(_fillHash, fillValue);
}
// 베지어 곡선을 사용하여 위치 계산
var position = Mathf.Pow(1 - t, 2) * startPosition +
2 * (1 - t) * t * controlPoint +
Mathf.Pow(t, 2) * _destination;
_projectileObject.transform.position = position;
yield return null;
}
_indicator.material.SetFloat(_fillHash, 1f);
HideIndicator();
Destroy(gameObject, 3.5f);
}
public void Initialize(Vector3 destination)
{
_destination = destination;
_isInitialized = true;
}
private void BasicSetting()
{
if (!_isUsingIndicator || !_indicator) return;
_indicator.scaleMode = DecalScaleMode.InheritFromHierarchy;
_indicator.material = new Material(_indicator.material);
_indicator.material.SetFloat(_fillHash, 0f);
var indicatorScale = _projectileObject.SphereRadius * 2f;
_indicator.transform.localScale = Vector3.one * indicatorScale;
_indicator.transform.position = _destination + Vector3.up * _sphereCollider.radius;
}
private void HideIndicator()
{
if (!_isUsingIndicator || !_indicator) return;
_indicator.enabled = false;
_indicator.material.SetFloat(_fillHash, 0);
}
private void ShowIndicator()
{
if (!_isUsingIndicator || !_indicator) return;
_indicator.material.SetFloat(_fillHash, 0);
_indicator.enabled = true;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8e2ef61c9cb12a247b29ca9198e5576f

View File

@ -21,4 +21,5 @@ MonoBehaviour:
<SkillDataList>k__BackingField:
- {fileID: 6760430575876107212, guid: a09fc16b8b3c86a4e88ac3f049b5fd89, type: 3}
- {fileID: 2789312915140829590, guid: 8f4a84b8b6727c64ea203026334a60c2, type: 3}
- {fileID: -8817476587284398613, guid: 1ac17d81b98c9fb488ac24d8e2291955, type: 3}
<MoveSpeed>k__BackingField: 3

View File

@ -0,0 +1,31 @@
%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: 8216310984547f644aedbd55c040f3d6, type: 3}
m_Name: GateOfSpikesData
m_EditorClassIdentifier:
<Name>k__BackingField: GateOfSpikes
<DisplayName>k__BackingField: "\uAC8C\uC774\uD2B8 \uC624\uBE0C \uC2A4\uD30C\uC774\uD06C"
<Description>k__BackingField:
<Damage>k__BackingField: 1
<Cooldown>k__BackingField: 10
<Radius>k__BackingField: 5
<CastingTime>k__BackingField: 0
<Duration>k__BackingField: 0
<TargetLayer>k__BackingField:
serializedVersion: 2
m_Bits: 2496
<SpikePrefab>k__BackingField: {fileID: 9002322086633083442, guid: 90f6fd643c61df44a908c9d621fd7827, type: 3}
<SpikeCount>k__BackingField: 10
<MinDistanceBetweenAttacks>k__BackingField: 1
<GroundLayer>k__BackingField:
serializedVersion: 2
m_Bits: 64

View File

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

View File

@ -29,7 +29,7 @@ MonoBehaviour:
<RollSpeed>k__BackingField: 40
<PushPower>k__BackingField: 8
<AirJumpForce>k__BackingField: 3
<BounceBackForce>k__BackingField: 150
<BounceBackForce>k__BackingField: 200
<CameraShakingPower>k__BackingField: 5
<CameraShakingDuration>k__BackingField: 1
<RockfallPrefab>k__BackingField: {fileID: 403575580428700795, guid: 28e4d21533af9b949a4cb910f2d4fa4c, type: 3}

View File

@ -0,0 +1,20 @@
using UnityEngine;
namespace BlueWater.Enemies.Bosses.SandMole.Skills
{
[CreateAssetMenu(fileName = "GateOfSpikesData", menuName = "ScriptableObjects/Skills/SandMole/GateOfSpikesData", order = (int)SandMoleSkill.GateOfSpikes)]
public class GateOfSpikesData : SkillData
{
[field: SerializeField]
public GameObject SpikePrefab { get; private set; }
[field: SerializeField]
public int SpikeCount { get; private set; } = 10;
[field: SerializeField]
public float MinDistanceBetweenAttacks { get; private set; } = 2f;
[field: SerializeField]
public LayerMask GroundLayer { get; private set; }
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8216310984547f644aedbd55c040f3d6

View File

@ -18,7 +18,7 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills
public float AirJumpForce { get; private set; } = 3f;
[field: SerializeField, Tooltip("벽에 부딪혔을 때, 밀려나는 힘")]
public float BounceBackForce { get; private set; } = 150f;
public float BounceBackForce { get; private set; } = 200f;
[field: SerializeField]
public float CameraShakingPower { get; private set; } = 5f;

View File

@ -0,0 +1,106 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BlueWater.Maps;
using BlueWater.Utility;
using UnityEngine;
using Random = UnityEngine.Random;
namespace BlueWater.Enemies.Bosses.SandMole.Skills
{
public class GateOfSpikes : BaseSkill
{
private GateOfSpikesData _gateOfSpikesData;
private SandMole _sandMole;
private AnimationController _animationController;
private Collider _userCollider;
private Collider _targetCollider;
private Transform _particleInstantiateLocation;
private List<Vector3> _spikes;
protected override void BasicSetting()
{
if (!_sandMole)
{
_sandMole = SkillUser.GetComponent<SandMole>();
_animationController = _sandMole.AnimationController;
_userCollider = _sandMole.CharacterCollider;
_targetCollider = _sandMole.Target;
_particleInstantiateLocation = MapManager.Instance.SandMoleMapController.ParticleInstantiateLocation;
}
_gateOfSpikesData = (GateOfSpikesData)SkillData;
_spikes = new List<Vector3>(_gateOfSpikesData.SpikeCount);
base.BasicSetting();
}
public override void ActivateSkill(params Action[] actions)
{
Utils.StartUniqueCoroutine(this, ref SkillCoroutineInstance, SkillCoroutine(actions));
}
private IEnumerator SkillCoroutine(params Action[] actions)
{
EnableSkill = false;
_sandMole.StopMove();
_animationController.SetAnimationParameter("skillIndex", (int)SandMoleSkill.GateOfSpikes);
var animationStarted = false;
yield return StartCoroutine(_animationController.WaitForAnimationToRun("GateOfSpikes",
success => animationStarted = success));
if (!animationStarted || !SkillUser || !_userCollider)
{
EndSkill(0, actions[0]);
yield break;
}
IsUsingSkill = true;
_animationController.ResetAnimationSpeed();
var startPosition = SkillUser.transform.position;
var targetCenterPosition = _targetCollider.transform.position;
startPosition.y = targetCenterPosition.y;
var targetVector = targetCenterPosition - startPosition;
var targetDirection = targetVector.normalized;
_sandMole.CurrentDirection = targetDirection;
var spikeSpawnPosition = _userCollider.bounds.center;
var validAttackPositions = new List<Vector3>();
while (validAttackPositions.Count < _gateOfSpikesData.SpikeCount)
{
var randomCircle = Random.insideUnitCircle * _gateOfSpikesData.Radius;
var randomPosition = targetCenterPosition + new Vector3(randomCircle.x, 0, randomCircle.y);
if (!IsPositionValid(randomPosition)) continue;
validAttackPositions.Add(randomPosition);
_spikes.Add(randomPosition);
var spike = Instantiate(_gateOfSpikesData.SpikePrefab, spikeSpawnPosition, Quaternion.identity,
_particleInstantiateLocation).GetComponent<GateOfSpike>();
spike.GetComponentInChildren<ProjectileController>().Initialize(_gateOfSpikesData.Damage, _gateOfSpikesData.TargetLayer);
spike.Initialize(randomPosition);
}
EndSkill(SkillData.Cooldown, actions[0]);
}
private bool IsPositionValid(Vector3 position)
{
var isOnGroundLayer = Physics.Raycast(position + Vector3.up, Vector3.down, 5f, _gateOfSpikesData.GroundLayer);
return isOnGroundLayer && _spikes.All(element => !(Vector3.Distance(position, element) < _gateOfSpikesData.MinDistanceBetweenAttacks));
}
private void EndSkill(float cooldown, Action action)
{
Utils.EndUniqueCoroutine(this, ref SkillCoroutineInstance);
_animationController.SetAnimationParameter("skillIndex", (int)SandMoleSkill.None);
action?.Invoke();
Utils.StartUniqueCoroutine(this, ref CooldownCoroutineInstance,Utils.CoolDownCoroutine(cooldown, EndCooldown));
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2aa55bbfb8ed76847aa19df9556f0bd9

View File

@ -12,8 +12,6 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills
private SandMole _sandMole;
private AnimationController _animationController;
private Collider _targetCollider;
private float _colliderRadius;
private float _attackRadius;
private Transform _particleInstantiateLocation;
protected override void BasicSetting()
@ -45,10 +43,8 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills
yield return StartCoroutine(_animationController.WaitForAnimationToRun("MultiThrowSpikes",
success => animationStarted = success));
print("1");
if (!animationStarted || !SkillUser)
{
print("2");
EndSkill(0, actions[0]);
yield break;
}
@ -59,15 +55,12 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills
var waitForSeconds = new WaitForSeconds(_multiThrowSpikesData.SpikeInterval);
for (var i = 0; i < _multiThrowSpikesData.SpikeCount; i++)
{
print("3");
if (!SkillUser || !_targetCollider)
{
print("4");
EndSkill(SkillData.Cooldown, actions[0]);
yield break;
}
// 실시간으로 일정 간격으로 Target의 위치를 받아와서 방향을 맞춰서 발사한다.
var targetCenterPosition = _targetCollider.bounds.center;
startPosition.y = targetCenterPosition.y;
var targetVector = targetCenterPosition - startPosition;

View File

@ -117,8 +117,17 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills
HideIndicator();
while (true)
elapsedTime = 0f;
var isCrashedWall = false;
while (!isCrashedWall)
{
if (elapsedTime >= 5f)
{
print("무한 루프 버그");
EndSkill(SkillData.Cooldown, actions[0]);
yield break;
}
if (!SkillUser)
{
EndSkill(SkillData.Cooldown, actions[0]);
@ -129,7 +138,6 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills
var moveDistance = _singleRollData.RollSpeed * Time.fixedDeltaTime;
var hitCount = Physics.OverlapSphereNonAlloc(skillUserPosition, _attackRadius, HitColliders,
_singleRollData.TargetLayer, QueryTriggerInteraction.Collide);
var isCrashedWall = false;
for (var i = 0; i < hitCount; i++)
{
@ -161,33 +169,28 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills
: Quaternion.Euler(0, 90, 0) * transform.forward;
iPhysicMovable.AddForce(addForceDirection * _singleRollData.PushPower, ForceMode.Impulse);
}
if (isCrashedWall)
{
var rockfallCount = (int)(targetDistance / _singleRollData.RockfallInterval);
for (var i = 2; i < rockfallCount; i++)
{
if (!SkillUser)
{
EndSkill(SkillData.Cooldown, actions[0]);
yield break;
}
var randomSide = Random.Range(_singleRollData.RandomSide.x, _singleRollData.RandomSide.y);
var spawnPosition = SkillUser.transform.position
+ -targetDirection * _singleRollData.RockfallInterval * i
+ Vector3.up * _singleRollData.RockfallSpawnHeight;
spawnPosition += Vector3.Cross(-targetDirection, Vector3.up).normalized * randomSide;
Instantiate(_singleRollData.RockfallPrefab, spawnPosition, Quaternion.identity, _sandMoleMapController.ParticleInstantiateLocation);
}
break;
}
_userRigidbody.MovePosition(skillUserPosition + targetDirection * moveDistance);
yield return new WaitForFixedUpdate();
}
var rockfallCount = (int)(targetDistance / _singleRollData.RockfallInterval);
for (var i = 2; i < rockfallCount; i++)
{
if (!SkillUser)
{
EndSkill(SkillData.Cooldown, actions[0]);
yield break;
}
var randomSide = Random.Range(_singleRollData.RandomSide.x, _singleRollData.RandomSide.y);
var spawnPosition = SkillUser.transform.position
+ -targetDirection * _singleRollData.RockfallInterval * i
+ Vector3.up * _singleRollData.RockfallSpawnHeight;
spawnPosition += Vector3.Cross(-targetDirection, Vector3.up).normalized * randomSide;
Instantiate(_singleRollData.RockfallPrefab, spawnPosition, Quaternion.identity, _sandMoleMapController.ParticleInstantiateLocation);
}
EndSkill(SkillData.Cooldown, actions[0]);
}

View File

@ -0,0 +1,194 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &174131517073896262
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5415367293591160993}
- component: {fileID: 4712250527758562314}
m_Layer: 0
m_Name: Indicator
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5415367293591160993
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 174131517073896262}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 9201249543235775511}
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!114 &4712250527758562314
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 174131517073896262}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0777d029ed3dffa4692f417d4aba19ca, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 2100000, guid: 0b52d77e4d2f39e4096329a5a410c6a3, type: 2}
m_DrawDistance: 1000
m_FadeScale: 0.9
m_StartAngleFade: 180
m_EndAngleFade: 180
m_UVScale: {x: 1, y: 1}
m_UVBias: {x: 0, y: 0}
m_DecalLayerMask: 1
m_ScaleMode: 1
m_Offset: {x: 0, y: 0, z: 0.5}
m_Size: {x: 1, y: 1, z: 1}
m_FadeFactor: 1
--- !u!1 &9002322086633083442
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9201249543235775511}
- component: {fileID: 2003526957314121454}
m_Layer: 0
m_Name: GateOfSpike
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &9201249543235775511
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9002322086633083442}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2832061815166961833}
- {fileID: 5415367293591160993}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2003526957314121454
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9002322086633083442}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e2ef61c9cb12a247b29ca9198e5576f, type: 3}
m_Name:
m_EditorClassIdentifier:
_projectileObject: {fileID: 6564172142274022919}
_rigidbody: {fileID: 346374874002928456}
_sphereCollider: {fileID: 2854288025065569428}
_indicator: {fileID: 4712250527758562314}
_isUsingIndicator: 1
_maxHeight: 10
_randomDuration: {x: 1, y: 1.5}
--- !u!1001 &5196771495479790409
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 9201249543235775511}
m_Modifications:
- target: {fileID: 194276104676398060, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_Name
value: GateOfSpikeParticle
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
--- !u!54 &346374874002928456 stripped
Rigidbody:
m_CorrespondingSourceObject: {fileID: 5534983560125118465, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
m_PrefabInstance: {fileID: 5196771495479790409}
m_PrefabAsset: {fileID: 0}
--- !u!4 &2832061815166961833 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8021796126892704736, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
m_PrefabInstance: {fileID: 5196771495479790409}
m_PrefabAsset: {fileID: 0}
--- !u!135 &2854288025065569428 stripped
SphereCollider:
m_CorrespondingSourceObject: {fileID: 8035217722497169373, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
m_PrefabInstance: {fileID: 5196771495479790409}
m_PrefabAsset: {fileID: 0}
--- !u!114 &6564172142274022919 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 1370849024704300366, guid: f9a780cf3ea5f1449a2a03f4f92b89dc, type: 3}
m_PrefabInstance: {fileID: 5196771495479790409}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7d160672a84624441af068504bf1b8c9, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 90f6fd643c61df44a908c9d621fd7827
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,109 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &194276104676398060
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8021796126892704736}
- component: {fileID: 5534983560125118465}
- component: {fileID: 8035217722497169373}
- component: {fileID: 1370849024704300366}
m_Layer: 0
m_Name: GateOfSpikeParticle
m_TagString: Missile
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8021796126892704736
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 194276104676398060}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!54 &5534983560125118465
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 194276104676398060}
serializedVersion: 4
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0
m_CenterOfMass: {x: 0, y: 0, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 0
m_IsKinematic: 0
m_Interpolate: 1
m_Constraints: 0
m_CollisionDetection: 0
--- !u!135 &8035217722497169373
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 194276104676398060}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &1370849024704300366
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 194276104676398060}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7d160672a84624441af068504bf1b8c9, type: 3}
m_Name:
m_EditorClassIdentifier:
_rigidbody: {fileID: 5534983560125118465}
_sphereCollider: {fileID: 8035217722497169373}
_projectilePrefab: {fileID: 1339409385940702124, guid: 54af6d1c262ce644085eb5fcb3bc84e5, type: 3}
_muzzleParticle: {fileID: 8379670427772074999, guid: 82c2f5f04b06a78449817259830635fe, type: 3}
<ImpactParticle>k__BackingField: {fileID: 4957782242376068896, guid: 02c25e70f96b2a34c92ae40dc6e32c35, type: 3}
_colliderRadius: 0.25
_collideOffset: 0
_attackDamage: 1
_targetLayer:
serializedVersion: 2
m_Bits: 2496
_useAutoDestroy: 1
_autoDestroyTime: 10

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f9a780cf3ea5f1449a2a03f4f92b89dc
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 54af6d1c262ce644085eb5fcb3bc84e5
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -50,7 +50,7 @@ ParticleSystem:
emitterVelocityMode: 0
looping: 0
prewarm: 0
playOnAwake: 0
playOnAwake: 1
useUnscaledTime: 0
autoRandomSeed: 1
startDelay:
@ -4953,7 +4953,7 @@ ParticleSystem:
emitterVelocityMode: 0
looping: 0
prewarm: 0
playOnAwake: 0
playOnAwake: 1
useUnscaledTime: 0
autoRandomSeed: 1
startDelay:
@ -9856,7 +9856,7 @@ ParticleSystem:
emitterVelocityMode: 0
looping: 0
prewarm: 0
playOnAwake: 0
playOnAwake: 1
useUnscaledTime: 0
autoRandomSeed: 1
startDelay:
@ -14774,7 +14774,7 @@ ParticleSystem:
emitterVelocityMode: 0
looping: 0
prewarm: 0
playOnAwake: 0
playOnAwake: 1
useUnscaledTime: 0
autoRandomSeed: 1
startDelay:
@ -19695,7 +19695,7 @@ ParticleSystem:
emitterVelocityMode: 0
looping: 0
prewarm: 0
playOnAwake: 0
playOnAwake: 1
useUnscaledTime: 0
autoRandomSeed: 1
startDelay:
@ -24598,7 +24598,7 @@ ParticleSystem:
emitterVelocityMode: 0
looping: 0
prewarm: 0
playOnAwake: 0
playOnAwake: 1
useUnscaledTime: 0
autoRandomSeed: 1
startDelay:
@ -29510,7 +29510,7 @@ ParticleSystem:
emitterVelocityMode: 0
looping: 0
prewarm: 0
playOnAwake: 0
playOnAwake: 1
useUnscaledTime: 0
autoRandomSeed: 1
startDelay:

View File

@ -0,0 +1,91 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &6575159217317842605
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 817830973935461002, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_Name
value: GateOfSpikes
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3155538962647367913, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7266951372888583716, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_Material
value:
objectReference: {fileID: 2100000, guid: a1e8e71505dd71149a84a361110dac07, type: 2}
- target: {fileID: 8663005856679327762, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 817830973935461002, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
insertIndex: -1
addedObject: {fileID: -8817476587284398613}
m_SourcePrefab: {fileID: 100100000, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
--- !u!1 &5793366936479968295 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 817830973935461002, guid: 1e5a4659704853944abea5a17e13cf6a, type: 3}
m_PrefabInstance: {fileID: 6575159217317842605}
m_PrefabAsset: {fileID: 0}
--- !u!114 &-8817476587284398613
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5793366936479968295}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2aa55bbfb8ed76847aa19df9556f0bd9, type: 3}
m_Name:
m_EditorClassIdentifier:
SkillData: {fileID: 11400000, guid: aa24ed40f29d49f48a713df4d1b119f9, type: 2}
EnableSkill: 1
IsUsingIndicator: 0
Indicator: {fileID: 0}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1ac17d81b98c9fb488ac24d8e2291955
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -26,15 +26,23 @@ MonoBehaviour:
Sequence","Instant":true,"AbortTypeabortType":"LowerPriority","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedInt","NodeData":{"Offset":"(-104.999634,149.904846)","Comment":"CurrentHealthPoint
== 0"},"ID":6,"Name":"Compare Shared Int","Instant":true,"SharedIntvariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"CurrentHealthPoint","IsShared":true,"Int32mValue":0},"SharedIntcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0}},{"Type":"BehaviorDesigner.Runtime.Tasks.StopBehaviorTree","NodeData":{"Offset":"(93.47067,153.019165)"},"ID":7,"Name":"Stop
Behavior Tree","Instant":true,"SharedGameObjectbehaviorGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedIntgroup":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedBoolpauseBehavior":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(1.07836533,154.29248)"},"ID":8,"Name":"Skill
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.UntilSuccess","NodeData":{"Offset":"(-4.999878,154.166809)"},"ID":9,"Name":"Until
Success","Instant":true,"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.RandomSelector","NodeData":{"Offset":"(-0.8695679,146.086731)"},"ID":10,"Name":"Random
Selector","Instant":true,"Int32seed":0,"BooleanuseSeed":false,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-665.4279,148.733643)"},"ID":11,"Name":"Single
Roll","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Conditionals.CanSkill","NodeData":{"Offset":"(-150,150)"},"ID":12,"Name":"Can
Skill","Instant":true,"BossSkillName_bossSkillName":"SingleRoll"},{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(0,150)"},"ID":13,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"SingleRoll"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(154.705811,153.681122)"},"ID":14,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-45.71466,160)"},"ID":15,"Name":"Multi
Throw Spikes","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Conditionals.CanSkill","NodeData":{"Offset":"(-150,150)"},"ID":16,"Name":"Can
Skill","Instant":true,"BossSkillName_bossSkillName":"MultiThrowSpikes"},{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(0,150)"},"ID":17,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"MultiThrowSpikes"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(150,150)"},"ID":18,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]}]}]}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"CurrentHealthPoint","IsShared":true,"Int32mValue":0},{"Type":"BehaviorDesigner.Runtime.SharedCollider","Name":"Target","IsShared":true}]}'
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-1258.3335,448.095245)"},"ID":9,"Name":"Multi
Throw Spikes","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-78.12497,150)"},"ID":10,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"MultiThrowSpikes"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(71.87503,150)"},"ID":11,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-931.5471,452.381)"},"ID":12,"Name":"Single
Roll","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-95.23809,150)"},"ID":13,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"SingleRoll"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(71.37249,153.681122)"},"ID":14,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":3},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-616.0723,449.166626)"},"ID":15,"Name":"Multi
Throw Spikes","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-71.4286,150)"},"ID":16,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"MultiThrowSpikes"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(78.571434,150)"},"ID":17,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(9.765897,452.758667)"},"ID":18,"Name":"Multi
Roll","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-383.3333,150)"},"ID":19,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"SingleRoll"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(-233.333313,150)"},"ID":20,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}},{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-84.2857,148.095215)"},"ID":21,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"SingleRoll"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(65.71442,148.095215)"},"ID":22,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}},{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(222.6831,147.804932)"},"ID":23,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"SingleRoll"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(372.682617,147.804932)"},"ID":24,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":4},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(624.928467,449.4253)"},"ID":25,"Name":"Gate
Of Spikes","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-73.52939,150)"},"ID":26,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"GateOfSpikes"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(76.47061,150)"},"ID":27,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(927.4391,446.111084)"},"ID":28,"Name":"Multi
Throw Spikes","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-70,150)"},"ID":29,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"MultiThrowSpikes"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(80,150)"},"ID":30,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(1264.14648,453.97522)"},"ID":31,"Name":"Single
Roll","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Enemies.Bosses.Actions.ActivateSkill","NodeData":{"Offset":"(-100,150)"},"ID":32,"Name":"Activate
Skill","Instant":true,"BossSkillName_bossSkillName":"SingleRoll"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(70,150)"},"ID":33,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":3},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"CurrentHealthPoint","IsShared":true,"Int32mValue":0},{"Type":"BehaviorDesigner.Runtime.SharedCollider","Name":"Target","IsShared":true}]}'
fieldSerializationData:
typeName: []
fieldNameHash: