Closes #256 코뿔소 보스 추가

This commit is contained in:
NTG 2024-05-14 01:23:53 +09:00
parent 498162d4a8
commit 7dac1cd0e7
63 changed files with 1036 additions and 757 deletions

View File

@ -3131,7 +3131,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
version: 1 version: 1
data: data:
dataString: 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 dataString: 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
file_cachedStartup: {fileID: 4900000, guid: 6667cce87a89cd645becd4a92e85c888, file_cachedStartup: {fileID: 4900000, guid: 6667cce87a89cd645becd4a92e85c888,
type: 3} type: 3}
cacheStartup: 0 cacheStartup: 0
@ -3374,6 +3374,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4bf8fa74e73b73d418a518bedb7b8bcb, type: 3} m_Script: {fileID: 11500000, guid: 4bf8fa74e73b73d418a518bedb7b8bcb, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
moveNextStageButton: {fileID: 877215465}
--- !u!1 &191889754 --- !u!1 &191889754
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -19745,7 +19746,7 @@ MonoBehaviour:
m_PressedTrigger: Pressed m_PressedTrigger: Pressed
m_SelectedTrigger: Selected m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled m_DisabledTrigger: Disabled
m_Interactable: 1 m_Interactable: 0
m_TargetGraphic: {fileID: 877215466} m_TargetGraphic: {fileID: 877215466}
m_OnClick: m_OnClick:
m_PersistentCalls: m_PersistentCalls:

View File

@ -10,7 +10,7 @@ namespace BlueWaterProject
[Serializable] [Serializable]
public class ActivateSkill : Action public class ActivateSkill : Action
{ {
[SerializeField] private string skillName; [SerializeField] private int skillIndex;
private FieldBoss fieldBoss; private FieldBoss fieldBoss;
@ -21,12 +21,12 @@ namespace BlueWaterProject
public override void OnStart() public override void OnStart()
{ {
fieldBoss.ActivateSkill(skillName); fieldBoss.ActivateSkill(skillIndex);
} }
public override TaskStatus OnUpdate() public override TaskStatus OnUpdate()
{ {
return fieldBoss.IsUsingSkill ? TaskStatus.Running : TaskStatus.Success; return fieldBoss.IsActivatingSkill ? TaskStatus.Running : TaskStatus.Success;
} }
} }
} }

View File

@ -1,6 +1,5 @@
using System; using System;
using BehaviorDesigner.Runtime.Tasks; using BehaviorDesigner.Runtime.Tasks;
using UnityEngine;
using Action = BehaviorDesigner.Runtime.Tasks.Action; using Action = BehaviorDesigner.Runtime.Tasks.Action;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
@ -10,9 +9,6 @@ namespace BlueWaterProject
[Serializable] [Serializable]
public class MoveTarget : Action public class MoveTarget : Action
{ {
[SerializeField] private float stoppingDistance;
[SerializeField] private float limitMovingTime;
private FieldBoss fieldBoss; private FieldBoss fieldBoss;
public override void OnAwake() public override void OnAwake()
@ -22,12 +18,12 @@ namespace BlueWaterProject
public override void OnStart() public override void OnStart()
{ {
fieldBoss.MoveTarget(stoppingDistance); fieldBoss.FollowTarget(fieldBoss.Target);
} }
public override TaskStatus OnUpdate() public override TaskStatus OnUpdate()
{ {
return fieldBoss.HasReachedDestination(limitMovingTime) ? TaskStatus.Success : TaskStatus.Running; return fieldBoss.HasReachedDestination() ? TaskStatus.Success : TaskStatus.Running;
} }
} }
} }

View File

@ -9,7 +9,8 @@ namespace BlueWaterProject
[Serializable] [Serializable]
public class EnableSkill : Conditional public class EnableSkill : Conditional
{ {
[SerializeField] private string skillName; [SerializeField] private int skillIndex;
private FieldBoss fieldBoss; private FieldBoss fieldBoss;
@ -20,7 +21,7 @@ namespace BlueWaterProject
public override TaskStatus OnUpdate() public override TaskStatus OnUpdate()
{ {
return fieldBoss.EnableSkill(skillName) ? TaskStatus.Success : TaskStatus.Failure; return fieldBoss.CanSkill(skillIndex) ? TaskStatus.Success : TaskStatus.Failure;
} }
} }
} }

View File

@ -1,10 +1,11 @@
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using BlueWaterProject; using BlueWaterProject;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
public class BossMapController : MonoBehaviour public abstract class BossMapController : MonoBehaviour
{ {
/// 컴포넌트 /// 컴포넌트
[Title("컴포넌트")] [Title("컴포넌트")]
@ -35,7 +36,6 @@ public class BossMapController : MonoBehaviour
// 보스 override로 추가 // 보스 override로 추가
} }
public void AllDestroyBoss() public void AllDestroyBoss()
{ {
foreach (var element in bossInstanceList) foreach (var element in bossInstanceList)
@ -56,4 +56,33 @@ public class BossMapController : MonoBehaviour
Destroy(element.gameObject); Destroy(element.gameObject);
} }
} }
public virtual void DieBoss()
{
StartCoroutine(nameof(DieBossCoroutine));
}
private IEnumerator DieBossCoroutine()
{
VisualFeedbackManager.Inst.SetBaseTimeScale(0.1f);
CombatUiManager.Inst.FadeInOut();
var elapsedTime = 0f;
while (elapsedTime <= 3f)
{
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
AllDestroyBoss();
VisualFeedbackManager.Inst.SetBaseTimeScale(1f);
elapsedTime = 0f;
while (elapsedTime <= 2f)
{
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
CombatUiManager.Inst.ClearPopupUi.Open();
}
} }

View File

@ -181,7 +181,7 @@ namespace BlueWaterProject
var ui = CombatUiManager.Inst.MainSkillUi; var ui = CombatUiManager.Inst.MainSkillUi;
ui.gameObject.SetActive(true); ui.gameObject.SetActive(true);
mainSkill.SkillInputData.InitInputData(transform, myCollider, myRb, null, myVisualLook, myAnimator, null, targetLayer, ui); mainSkill.SkillInputData.InitInputData(transform, myCollider, myRb, null, myVisualLook, myAnimator, null, targetLayer, ui, null, null);
mainSkill.InitData(); mainSkill.InitData();
} }
} }

View File

@ -96,7 +96,13 @@ namespace BlueWaterProject
private void FixedUpdate() private void FixedUpdate()
{ {
if (!EnableMove || IsDashing || combatStatus.IsStunned) return; if (!EnableMove || IsDashing) return;
if (combatStatus.IsStunned)
{
IsMoving = false;
return;
}
ApplyMovement(); ApplyMovement();
} }

View File

@ -125,7 +125,7 @@ namespace BlueWaterProject
animator.InitComponent(anim); animator.InitComponent(anim);
attacker.InitComponent(rb); attacker.InitComponent(rb);
health.InitComponent(flashWhiteSpriteRenderer); health.InitComponent(flashWhiteSpriteRenderer);
skillController.InitComponent(col, rb, visualLook, anim); skillController.InitComponent(col, rb, visualLook);
status.InitComponent(flashWhiteSpriteRenderer); status.InitComponent(flashWhiteSpriteRenderer);
GameManager.Inst.CurrentCombatPlayer = this; GameManager.Inst.CurrentCombatPlayer = this;

View File

@ -11,9 +11,9 @@ namespace BlueWaterProject
private Collider col; private Collider col;
private Rigidbody rb; private Rigidbody rb;
private Transform visualLook; private Transform visualLook;
private Animator anim;
// Interfaces // Interfaces
private IAnimationStateController iAnimationStateController;
private IMeleeComboAttackable iMeleeComboAttackable; private IMeleeComboAttackable iMeleeComboAttackable;
// Variables // Variables
@ -31,17 +31,17 @@ namespace BlueWaterProject
private void Start() private void Start()
{ {
iMeleeComboAttackable = GetComponent<IMeleeComboAttackable>(); iMeleeComboAttackable = GetComponent<IMeleeComboAttackable>();
iAnimationStateController = GetComponent<IAnimationStateController>();
InitSkill(); InitSkill();
} }
// Init methods // Init methods
public void InitComponent(Collider collider, Rigidbody rigidbody, Transform visualLook, Animator animator) public void InitComponent(Collider collider, Rigidbody rigidbody, Transform visualLook)
{ {
col = collider; col = collider;
rb = rigidbody; rb = rigidbody;
this.visualLook = visualLook; this.visualLook = visualLook;
anim = animator;
} }
private void InitSkill() private void InitSkill()
@ -54,7 +54,8 @@ namespace BlueWaterProject
ui.ResetSkillUi(); ui.ResetSkillUi();
ui.gameObject.SetActive(true); ui.gameObject.SetActive(true);
instantiateMainSkill.SkillInputData.InitInputData(transform, col, rb, null, visualLook, anim, null, targetLayer, ui); instantiateMainSkill.SkillInputData.InitInputData(transform, col, rb, null, visualLook,
null, null, targetLayer, ui, iAnimationStateController, null);
} }
// Events methods // Events methods

View File

@ -1,3 +1,4 @@
using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
@ -10,6 +11,9 @@ namespace BlueWaterProject
[field: SerializeField] public float MoveSpeedCoefficient { get; private set; } [field: SerializeField] public float MoveSpeedCoefficient { get; private set; }
[SerializeField] private Color slowColor; [SerializeField] private Color slowColor;
[Title("효과")]
[SerializeField] private ParticleSystem stunParticle;
private SpriteRenderer flashWhiteSpriteRenderer; private SpriteRenderer flashWhiteSpriteRenderer;
private Coroutine stunCoolDownCoroutine; private Coroutine stunCoolDownCoroutine;
@ -30,6 +34,7 @@ namespace BlueWaterProject
if (!enableTakeDamage) return; if (!enableTakeDamage) return;
IsStunned = true; IsStunned = true;
stunParticle.Play();
if (stunCoolDownCoroutine != null) if (stunCoolDownCoroutine != null)
{ {
@ -38,9 +43,10 @@ namespace BlueWaterProject
stunCoolDownCoroutine = StartCoroutine(Utils.CoolDown(duration, EndStun)); stunCoolDownCoroutine = StartCoroutine(Utils.CoolDown(duration, EndStun));
} }
private void EndStun() public void EndStun()
{ {
IsStunned = false; IsStunned = false;
stunParticle.Stop();
stunCoolDownCoroutine = null; stunCoolDownCoroutine = null;
} }
@ -59,7 +65,7 @@ namespace BlueWaterProject
slowMoveSpeedCoolDownCoroutine = StartCoroutine(Utils.CoolDown(duration, EndSlowMoveSpeed)); slowMoveSpeedCoolDownCoroutine = StartCoroutine(Utils.CoolDown(duration, EndSlowMoveSpeed));
} }
private void EndSlowMoveSpeed() public void EndSlowMoveSpeed()
{ {
flashWhiteSpriteRenderer.color = Color.white; flashWhiteSpriteRenderer.color = Color.white;
IsSlowedMoveSpeed = false; IsSlowedMoveSpeed = false;

View File

@ -1,10 +1,9 @@
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using BehaviorDesigner.Runtime; using BehaviorDesigner.Runtime;
using Pathfinding;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
using UnityEngine.AI;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace BlueWaterProject namespace BlueWaterProject
@ -19,18 +18,19 @@ namespace BlueWaterProject
// 컴포넌트 // 컴포넌트
[Title("컴포넌트")] [Title("컴포넌트")]
[SerializeField] protected Rigidbody rb; [SerializeField] protected Rigidbody rb;
[SerializeField] protected Collider capsuleCollider; [SerializeField] protected Collider col;
[SerializeField] protected NavMeshAgent agent;
[SerializeField] protected BehaviorTree behaviorTree; [SerializeField] protected BehaviorTree behaviorTree;
[SerializeField] protected Transform visualLook; [SerializeField] protected Transform visualLook;
[SerializeField] protected Animator animator; [field: SerializeField] public Animator Anim { get; set; }
[SerializeField] protected SpriteRenderer spriteRenderer; [SerializeField] protected SpriteRenderer flashWhiteSpriteRenderer;
[SerializeField] protected BossMapController mapController;
protected IAnimationStateController iAnimationStateController;
protected IAstarAI ai;
// 보스 스탯 // 보스 스탯
[field: Title("보스 스탯")] [field: Title("보스 스탯")]
[field: SerializeField] public string BossName { get; private set; } [field: SerializeField] public string BossName { get; private set; }
[field: SerializeField] public float MaxHp { get; private set; } = 500f; [field: SerializeField] public float MaxHp { get; private set; } = 500f;
[SerializeField] protected float moveSpeed = 3f;
[SerializeField] protected LayerMask targetLayer; [SerializeField] protected LayerMask targetLayer;
// 피격 효과 // 피격 효과
@ -39,27 +39,29 @@ namespace BlueWaterProject
// 스킬 // 스킬
[Title("스킬")] [Title("스킬")]
[SerializeField] protected List<SkillBase> skillList = new(6); [SerializeField] protected List<BaseSkill> skillList = new();
protected Dictionary<string, ISkill> skillDictionary = new(6); protected List<BaseSkill> instantiateSkillList;
private List<SkillBase> instanceSkillList = new(6);
// 실시간 데이터 // 실시간 데이터
[field: Title("실시간 데이터")] [field: Title("실시간 데이터")]
[field: SerializeField] public float CurrentHp { get; private set; } [field: SerializeField] public float CurrentHp { get; private set; }
[field: SerializeField] public Collider Target { get; set; } [field: SerializeField] public Collider Target { get; set; }
[field: SerializeField] public bool IsUsingSkill { get; protected set; } [field: SerializeField] public bool IsActivatingSkill { get; protected set; }
public FieldBossHpSlider FieldBossHpSlider { get; set; } protected virtual Vector3 PreviousMoveDirection { get; set; } = Vector3.right;
protected Vector3 PreviousDirection { get; set; } = Vector3.right;
private Coroutine flashWhiteCoroutine; private Coroutine flashWhiteCoroutine;
private WaitForSeconds flashWhiteWaitTime; private WaitForSeconds flashWhiteWaitTime;
private float departureTime = -1f; private float departureTime = -1f;
protected bool isDead;
// Hashes
protected static readonly int IsHitHash = Shader.PropertyToID("_IsHit"); protected static readonly int IsHitHash = Shader.PropertyToID("_IsHit");
// events
public delegate void ChangedCurrentHpEvent(float currentHp);
public event ChangedCurrentHpEvent OnChangedCurrentHp;
#endregion #endregion
/*********************************************************************** /***********************************************************************
@ -67,24 +69,34 @@ namespace BlueWaterProject
***********************************************************************/ ***********************************************************************/
#region Unity Events #region Unity Events
protected virtual void Awake()
{
InitComponent();
}
protected virtual void Start() protected virtual void Start()
{ {
InitStart(); InitStart();
} }
private void OnDestroy() protected virtual void Update()
{ {
if (FieldBossHpSlider != null) FlipVisualLook();
{
FieldBossHpSlider.SetActiveHpSlider(false);
} }
foreach (var element in instanceSkillList) protected virtual void OnDestroy()
{ {
if (element != null) if (CombatUiManager.Inst != null && CombatUiManager.Inst.FieldBossHpSlider != null)
{ {
Destroy(element); CombatUiManager.Inst.FieldBossHpSlider.SetActiveHpSlider(false);
OnChangedCurrentHp -= CombatUiManager.Inst.FieldBossHpSlider.UpdateHpSlider;
}
foreach (var element in instantiateSkillList)
{
if (element != null && element.gameObject != null)
{
Destroy(element.gameObject);
} }
} }
} }
@ -97,33 +109,30 @@ namespace BlueWaterProject
#region Init Methods #region Init Methods
[Button("셋팅 초기화")] [Button("셋팅 초기화")]
private void Init() protected virtual void InitComponent()
{ {
rb = GetComponent<Rigidbody>(); rb = GetComponent<Rigidbody>();
capsuleCollider = GetComponent<Collider>(); col = GetComponent<Collider>();
agent = GetComponent<NavMeshAgent>();
behaviorTree = GetComponent<BehaviorTree>(); behaviorTree = GetComponent<BehaviorTree>();
visualLook = transform.Find("VisualLook"); visualLook = transform.Find("VisualLook");
animator = visualLook.GetComponent<Animator>(); Anim = visualLook.GetComponent<Animator>();
spriteRenderer = visualLook.GetComponent<SpriteRenderer>(); flashWhiteSpriteRenderer = visualLook.GetComponent<SpriteRenderer>();
} }
private void InitStart() protected virtual void InitStart()
{ {
agent.updateRotation = false; OnChangedCurrentHp += CombatUiManager.Inst.FieldBossHpSlider.UpdateHpSlider;
agent.speed = moveSpeed;
SetCurrentHp(MaxHp); SetCurrentHp(MaxHp);
Target = GameObject.FindGameObjectWithTag("CombatPlayer").GetComponent<Collider>();
flashWhiteWaitTime = new WaitForSeconds(flashWhiteTime); flashWhiteWaitTime = new WaitForSeconds(flashWhiteTime);
instantiateSkillList = new List<BaseSkill>(skillList.Count);
foreach (var element in skillList) foreach (var element in skillList)
{ {
var skill = Instantiate(element, Vector3.zero, Quaternion.identity); var instantiateSkill = Instantiate(element, Vector3.zero, Quaternion.identity);
skillDictionary.Add(skill.SkillName, skill); instantiateSkill.SkillInputData.InitInputData(transform, col, rb, null, visualLook,
Anim, Target, targetLayer, null, iAnimationStateController, ai);
skill.SkillInputData.InitInputData(transform, capsuleCollider, rb, agent, visualLook, animator, Target, targetLayer, null); instantiateSkillList.Add(instantiateSkill);
skill.InitData();
instanceSkillList.Add(skill);
} }
} }
@ -138,11 +147,10 @@ namespace BlueWaterProject
// IDamageable // IDamageable
public void TakeDamage(float attackerPower, Vector3? attackPos = null) public void TakeDamage(float attackerPower, Vector3? attackPos = null)
{ {
if (isDead) return; if (CurrentHp <= 0) return;
var changeHp = Mathf.Max(CurrentHp - attackerPower, 0); var changeHp = Mathf.Max(CurrentHp - attackerPower, 0);
SetCurrentHp(changeHp); SetCurrentHp(changeHp);
FieldBossHpSlider.UpdateHpSlider(changeHp);
// 죽었는지 체크 // 죽었는지 체크
if (changeHp == 0f) if (changeHp == 0f)
@ -152,7 +160,7 @@ namespace BlueWaterProject
} }
// 공격 당함 // 공격 당함
if (spriteRenderer) if (flashWhiteSpriteRenderer)
{ {
flashWhiteCoroutine = StartCoroutine(nameof(FlashWhiteCoroutine)); flashWhiteCoroutine = StartCoroutine(nameof(FlashWhiteCoroutine));
} }
@ -160,11 +168,17 @@ namespace BlueWaterProject
public virtual void Die() public virtual void Die()
{ {
Destroy(gameObject, 2f); mapController.DieBoss();
} }
public float GetCurrentHp() => CurrentHp; public float GetCurrentHp() => CurrentHp;
protected void SetCurrentHp(float value)
{
CurrentHp = value;
OnChangedCurrentHp?.Invoke(value);
}
#endregion #endregion
/*********************************************************************** /***********************************************************************
@ -172,80 +186,33 @@ namespace BlueWaterProject
***********************************************************************/ ***********************************************************************/
#region Methods #region Methods
public void MovePoint(Vector3 point, float stoppingDistance) public abstract void MoveToPosition(Vector3 position);
{ public abstract void TeleportToPosition(Vector3 position);
if (agent) public abstract void FollowTarget(Collider target);
{ public abstract bool HasReachedDestination();
agent.stoppingDistance = stoppingDistance; public abstract void StopMovement();
agent.SetDestination(point); public abstract void CanMovement();
} public abstract void SetMovementSpeed(float speed);
}
public void MoveTarget(float stoppingDistance) public bool CanSkill(int skillIndex)
{ {
if (agent && agent.enabled) if (IsActivatingSkill) return false;
{
//rb.isKinematic = true;
agent.isStopped = false;
agent.stoppingDistance = stoppingDistance;
agent.SetDestination(Target.transform.position);
}
}
public bool HasReachedDestination(float limitMovingTime) return instantiateSkillList[skillIndex].EnableSkill();
{
// 경로 계산 중이면 false
if (!agent || !agent.enabled || agent.pathPending)
{
departureTime = -1f;
return false;
}
if (departureTime < 0f)
{
departureTime = Time.time;
}
if (departureTime > 0f && Time.time - departureTime >= limitMovingTime)
{
agent.velocity = Vector3.zero;
agent.isStopped = true;
//rb.isKinematic = false;
departureTime = -1f;
return true;
}
// 남은 거리가 정지 거리 이상이면 false
if (agent.remainingDistance > agent.stoppingDistance) return false;
// 경로가 있고, 속도가 0이 아니면 false
if (agent.hasPath && agent.velocity.sqrMagnitude != 0f) return false;
agent.velocity = Vector3.zero;
agent.isStopped = true;
//rb.isKinematic = false;
departureTime = -1f;
return true;
}
public bool EnableSkill(string skillName)
{
if (IsUsingSkill) return false;
if (skillDictionary.ContainsKey(skillName))
{
return skillDictionary[skillName].EnableSkill();
}
return false;
} }
[Button("스킬 사용")] [Button("스킬 사용")]
public virtual void ActivateSkill(string skillName){} public void ActivateSkill(int skillIndex)
private void SetCurrentHp(float value)
{ {
CurrentHp = value; if (!CanSkill(skillIndex)) return;
StopMovement();
IsActivatingSkill = true;
instantiateSkillList[skillIndex].SkillInputData.PreviousDirection = PreviousMoveDirection;
instantiateSkillList[skillIndex].ActivateSkill(
() => IsActivatingSkill = false,
() => PreviousMoveDirection = GetTargetDirection());
} }
public float GetTargetDistance() public float GetTargetDistance()
@ -262,11 +229,23 @@ namespace BlueWaterProject
return distance.normalized; return distance.normalized;
} }
private void FlipVisualLook()
{
var localScale = visualLook.localScale;
localScale.x = PreviousMoveDirection.x switch
{
> 0.01f => Mathf.Abs(localScale.x),
< -0.01f => -Mathf.Abs(localScale.x),
_ => localScale.x
};
visualLook.localScale = localScale;
}
private IEnumerator FlashWhiteCoroutine() private IEnumerator FlashWhiteCoroutine()
{ {
spriteRenderer.material.SetInt(IsHitHash, 1); flashWhiteSpriteRenderer.material.SetInt(IsHitHash, 1);
yield return flashWhiteWaitTime; yield return flashWhiteWaitTime;
spriteRenderer.material.SetInt(IsHitHash, 0); flashWhiteSpriteRenderer.material.SetInt(IsHitHash, 0);
} }
#endregion #endregion

View File

@ -1,19 +1,85 @@
using System;
using System.Collections.Generic;
using Pathfinding;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace BlueWaterProject namespace BlueWaterProject
{ {
public class Rhinoceros : FieldBoss public enum RhinocerosAnimationParameter
{
X_DIRECTION = 0,
Z_DIRECTION,
IS_MOVING,
IS_DEAD,
SKILL_INDEX
}
public enum RhinocerosAnimationName
{
BULL_CHARGE,
HAMMER_SLAM,
METEOR_SWING,
SEISMIC_THRUST,
SKY_FALL_JUMP,
SKY_FALL_SMASH
}
public class Rhinoceros : FieldBoss, IAnimationStateController
{ {
/*********************************************************************** /***********************************************************************
* Variables * Variables
***********************************************************************/ ***********************************************************************/
#region Variables #region Variables
// 실시간 상태 private bool isMoving;
[Title("실시간 상태")] public bool IsMoving
[SerializeField] private bool isMoving; {
get => isMoving;
set
{
isMoving = value;
iAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.IS_MOVING, isMoving);
}
}
private Vector3 currentMoveDirection;
private Vector3 previousMoveDirection = Vector3.right;
protected override Vector3 PreviousMoveDirection
{
get => previousMoveDirection;
set
{
previousMoveDirection = value;
iAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.X_DIRECTION, PreviousMoveDirection.x);
iAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.Z_DIRECTION, PreviousMoveDirection.z);
}
}
// Dictionaries
private Dictionary<RhinocerosAnimationParameter, int> animationParameterHashDictionary;
private Dictionary<RhinocerosAnimationName, int> animationNameHashDictionary;
// Parameter hashes
private static readonly int XDirectionHash = Animator.StringToHash("xDirection");
private static readonly int ZDirectionHash = Animator.StringToHash("zDirection");
private static readonly int IsMovingHash = Animator.StringToHash("isMoving");
private static readonly int IsDeadHash = Animator.StringToHash("isDead");
private static readonly int SkillIndexHash = Animator.StringToHash("skillIndex");
// Animation name hashes
private static readonly int BullChargeHash = Animator.StringToHash("BullCharge");
private static readonly int HammerSlamHash = Animator.StringToHash("HammerSlam");
private static readonly int MeteorSwingHash = Animator.StringToHash("MeteorSwing");
// private static readonly int SeismicThrustHash = Animator.StringToHash("SeismicThrust");
private static readonly int SkyFallJumpHash = Animator.StringToHash("SkyFallJump");
private static readonly int SkyFallSmashHash = Animator.StringToHash("SkyFallSmash");
// Hashes
#endregion #endregion
@ -22,9 +88,18 @@ namespace BlueWaterProject
***********************************************************************/ ***********************************************************************/
#region Unity Events #region Unity Events
private void Update() protected override void Awake()
{ {
MoveHandler(); base.Awake();
InitDictionary();
}
protected override void Update()
{
HandleMovement();
base.Update();
} }
#endregion #endregion
@ -34,6 +109,45 @@ namespace BlueWaterProject
***********************************************************************/ ***********************************************************************/
#region Init Methods #region Init Methods
protected override void InitComponent()
{
base.InitComponent();
mapController = FindAnyObjectByType<RhinocerosBossMapController>();
iAnimationStateController = GetComponent<IAnimationStateController>();
ai = GetComponent<IAstarAI>();
}
private void InitDictionary()
{
animationParameterHashDictionary = new Dictionary<RhinocerosAnimationParameter, int>(Enum.GetValues(typeof(RhinocerosAnimationParameter)).Length)
{
{ RhinocerosAnimationParameter.X_DIRECTION, XDirectionHash },
{ RhinocerosAnimationParameter.Z_DIRECTION, ZDirectionHash },
{ RhinocerosAnimationParameter.IS_MOVING, IsMovingHash },
{ RhinocerosAnimationParameter.IS_DEAD, IsDeadHash },
{ RhinocerosAnimationParameter.SKILL_INDEX, SkillIndexHash },
};
animationNameHashDictionary = new Dictionary<RhinocerosAnimationName, int>(Enum.GetValues(typeof(RhinocerosAnimationName)).Length)
{
{ RhinocerosAnimationName.BULL_CHARGE, BullChargeHash },
{ RhinocerosAnimationName.HAMMER_SLAM, HammerSlamHash },
{ RhinocerosAnimationName.METEOR_SWING, MeteorSwingHash },
//{ RhinocerosAnimationName.SEISMIC_THRUST, SeismicThrustHash },
{ RhinocerosAnimationName.SKY_FALL_JUMP, SkyFallJumpHash },
{ RhinocerosAnimationName.SKY_FALL_SMASH, SkyFallSmashHash }
};
}
protected override void InitStart()
{
SetTarget();
base.InitStart();
behaviorTree.EnableBehavior();
}
#endregion #endregion
@ -42,16 +156,10 @@ namespace BlueWaterProject
***********************************************************************/ ***********************************************************************/
#region Interfaces #region Interfaces
[Button("Die Test")]
public override void Die() public override void Die()
{ {
isDead = true; StopMovement();
if (agent && agent.enabled)
{
agent.velocity = Vector3.zero;
agent.isStopped = true;
agent.enabled = false;
}
if (rb) if (rb)
{ {
@ -59,13 +167,152 @@ namespace BlueWaterProject
rb.isKinematic = true; rb.isKinematic = true;
} }
if (capsuleCollider && capsuleCollider.enabled) SetAnimationTrigger(RhinocerosAnimationParameter.IS_DEAD);
{
capsuleCollider.isTrigger = true; base.Die();
} }
animator.SetTrigger("isDead"); public override void MoveToPosition(Vector3 position)
Destroy(gameObject, 2f); {
if (ai == null) return;
ai.destination = position;
CanMovement();
}
public override void TeleportToPosition(Vector3 position)
{
ai.Teleport(position);
}
public override bool HasReachedDestination()
{
return ai != null && !ai.pathPending && ai.reachedEndOfPath;
}
public override void FollowTarget(Collider target)
{
if (ai == null || target == null) return;
ai.destination = target.transform.position;
CanMovement();
}
public override void StopMovement()
{
if (ai == null) return;
ai.isStopped = true;
ai.canMove = false;
ai.SetPath(null);
IsMoving = false;
}
public override void CanMovement()
{
if (ai == null) return;
ai.isStopped = false;
ai.canMove = true;
}
public override void SetMovementSpeed(float speed)
{
if (ai == null) return;
ai.maxSpeed = speed;
}
// IAnimationStateController
public void SetAnimationParameter<T>(T parameter, bool value) where T : Enum
{
if (parameter is RhinocerosAnimationParameter enumParameter)
{
if (animationParameterHashDictionary.TryGetValue(enumParameter, out var hash))
{
Anim.SetBool(hash, value);
}
else
{
throw new KeyNotFoundException($"The parameter {parameter} was not found in the dictionary.");
}
}
else
{
throw new ArgumentException("Invalid parameter type for SetAnimationParameter");
}
}
public void SetAnimationParameter<T>(T parameter, int value) where T : Enum
{
if (parameter is RhinocerosAnimationParameter enumParameter)
{
if (animationParameterHashDictionary.TryGetValue(enumParameter, out var hash))
{
Anim.SetInteger(hash, value);
}
else
{
throw new KeyNotFoundException($"The parameter {parameter} was not found in the dictionary.");
}
}
else
{
throw new ArgumentException("Invalid parameter type for SetAnimationParameter");
}
}
public void SetAnimationParameter<T>(T parameter, float value) where T : Enum
{
if (parameter is RhinocerosAnimationParameter enumParameter)
{
if (animationParameterHashDictionary.TryGetValue(enumParameter, out var hash))
{
Anim.SetFloat(hash, value);
}
else
{
throw new KeyNotFoundException($"The parameter {parameter} was not found in the dictionary.");
}
}
else
{
throw new ArgumentException("Invalid parameter type for SetAnimationParameter");
}
}
public void SetAnimationTrigger<T>(T parameter) where T : Enum
{
if (parameter is RhinocerosAnimationParameter enumParameter)
{
if (animationParameterHashDictionary.TryGetValue(enumParameter, out var hash))
{
Anim.SetTrigger(hash);
}
else
{
throw new KeyNotFoundException($"The parameter {parameter} was not found in the dictionary.");
}
}
else
{
throw new ArgumentException("Invalid parameter type for SetAnimationParameter");
}
}
public bool IsComparingCurrentAnimation<T>(T animationName, int animatorLayer = 0) where T : Enum
{
if (animationName is not RhinocerosAnimationName enumAnimationName)
{
throw new ArgumentException("Invalid parameter type for SetAnimationParameter");
}
if (animationNameHashDictionary.TryGetValue(enumAnimationName, out var hash))
{
return Anim.GetCurrentAnimatorStateInfo(animatorLayer).shortNameHash == hash;
}
throw new KeyNotFoundException($"The parameter {animationName} was not found in the dictionary.");
} }
#endregion #endregion
@ -75,48 +322,21 @@ namespace BlueWaterProject
***********************************************************************/ ***********************************************************************/
#region Methods #region Methods
public override void ActivateSkill(string skillName) private void HandleMovement()
{ {
IsUsingSkill = true; if (!ai.canMove) return;
skillDictionary[skillName].SkillInputData.PreviousDirection = PreviousDirection; currentMoveDirection = ai.velocity.normalized;
skillDictionary[skillName].ActivateSkill( IsMoving = ai.velocity != Vector3.zero;
() => IsUsingSkill = false, if (IsMoving)
() => PreviousDirection = GetTargetDirection());
}
private void MoveHandler()
{ {
if (agent) PreviousMoveDirection = currentMoveDirection;
{
//var localVelocity = transform.InverseTransformDirection(agent.velocity);
//var moveDirection = localVelocity.normalized;
var moveDirection = agent.enabled ? agent.velocity.normalized : rb.velocity.normalized;
isMoving = moveDirection != Vector3.zero;
animator.SetBool("isMoving", isMoving);
if (isMoving)
{
PreviousDirection = moveDirection;
}
animator.SetFloat("xDirection", PreviousDirection.x);
animator.SetFloat("zDirection", PreviousDirection.z);
FlipVisualLook(PreviousDirection.x);
} }
} }
private void FlipVisualLook(float previousDirectionX) public void SetTarget()
{ {
var localScale = visualLook.localScale; Target = GameManager.Inst.CurrentCombatPlayer.GetComponent<Collider>();
localScale.x = previousDirectionX switch
{
> 0.01f => Mathf.Abs(localScale.x),
< -0.01f => -Mathf.Abs(localScale.x),
_ => localScale.x
};
visualLook.localScale = localScale;
} }
#endregion #endregion

View File

@ -220,7 +220,7 @@ namespace BlueWaterProject
instantiateDieParticle.Play(); instantiateDieParticle.Play();
if (slimeState.Level == 4 && slimeState.HasRabbit) if (slimeState.Level == 4 && slimeState.HasRabbit)
{ {
mapController.DieRabbit(); mapController.DieBoss();
return; return;
} }
if (slimeState.Level <= 4) if (slimeState.Level <= 4)
@ -230,10 +230,7 @@ namespace BlueWaterProject
Destroy(gameObject); Destroy(gameObject);
} }
public float GetCurrentHp() public float GetCurrentHp() => currentHp;
{
return currentHp;
}
public void SetCurrentHp(float value) public void SetCurrentHp(float value)
{ {

View File

@ -39,7 +39,8 @@ namespace BlueWaterProject
public void InstantiateCombatPlayer(Vector3 position, Quaternion rotation = default) public void InstantiateCombatPlayer(Vector3 position, Quaternion rotation = default)
{ {
var instantiatePlayer = Instantiate(combatPlayerPrefab, position, rotation); var instantiatePlayer = Instantiate(combatPlayerPrefab, position, rotation).GetComponent<CombatPlayer>();
CurrentCombatPlayer = instantiatePlayer;
OnInstantiateCombatPlayer?.Invoke(instantiatePlayer.transform); OnInstantiateCombatPlayer?.Invoke(instantiatePlayer.transform);
} }
} }

View File

@ -9,7 +9,11 @@ namespace BlueWaterProject
{ {
base.Close(); base.Close();
FindAnyObjectByType<PlayerInput>()?.SwitchCurrentActionMap(CombatInput.COMBAT); var playerInput = FindAnyObjectByType<PlayerInput>();
if (playerInput != null && playerInput.enabled)
{
playerInput.SwitchCurrentActionMap(CombatInput.COMBAT);
}
} }
protected override void InitAndUpdateInventory() protected override void InitAndUpdateInventory()

View File

@ -9,7 +9,11 @@ namespace BlueWaterProject
{ {
base.Close(); base.Close();
FindAnyObjectByType<PlayerInput>()?.SwitchCurrentActionMap(ShipPlayer.OCEAN); var playerInput = FindAnyObjectByType<PlayerInput>();
if (playerInput != null && playerInput.enabled)
{
playerInput.SwitchCurrentActionMap(ShipPlayer.OCEAN);
}
} }
protected override void InitAndUpdateInventory() protected override void InitAndUpdateInventory()

View File

@ -1,4 +1,5 @@
using System; using System;
using Pathfinding;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
using UnityEngine.AI; using UnityEngine.AI;
@ -20,11 +21,15 @@ namespace BlueWaterProject
[field: SerializeField] public Collider TargetCollider { get; set; } [field: SerializeField] public Collider TargetCollider { get; set; }
[field: SerializeField] public LayerMask TargetLayer { get; set; } [field: SerializeField] public LayerMask TargetLayer { get; set; }
[field: SerializeField] public SkillUi SkillUi { get; set; } [field: SerializeField] public SkillUi SkillUi { get; set; }
public IAnimationStateController IAnimationStateController { get; set; }
public IAstarAI Ai { get; set; }
public Vector3 StartPosition { get; set; } public Vector3 StartPosition { get; set; }
public Vector3 PreviousDirection { get; set; } public Vector3 PreviousDirection { get; set; }
public void InitInputData(Transform transform, Collider collider, Rigidbody rb, NavMeshAgent playerAgent, Transform visualLook, Animator animator, Collider target, LayerMask layer, SkillUi ui) public void InitInputData(Transform transform, Collider collider, Rigidbody rb, NavMeshAgent playerAgent,
Transform visualLook,Animator animator, Collider target, LayerMask layer, SkillUi ui,
IAnimationStateController iAnimationStateController, IAstarAI ai)
{ {
Transform = transform; Transform = transform;
PlayerCollider = collider; PlayerCollider = collider;
@ -35,6 +40,8 @@ namespace BlueWaterProject
TargetCollider = target; TargetCollider = target;
TargetLayer = layer; TargetLayer = layer;
SkillUi = ui; SkillUi = ui;
IAnimationStateController = iAnimationStateController;
Ai = ai;
} }
} }
@ -78,27 +85,16 @@ namespace BlueWaterProject
#endregion #endregion
/*********************************************************************** /***********************************************************************
* Interfaces * Init methods
***********************************************************************/ ***********************************************************************/
#region Interfaces #region Interfaces
public abstract void ActivateSkill(params Action[] actions);
public virtual bool EnableSkill() => enableSkill;
protected virtual void InitData() protected virtual void InitData()
{ {
BasicSetting(); BasicSetting();
HideIndicator(); HideIndicator();
} }
#endregion
/***********************************************************************
* Methods
***********************************************************************/
#region Methods
protected virtual void BasicSetting() protected virtual void BasicSetting()
{ {
if (isUsingIndicator && indicator) if (isUsingIndicator && indicator)
@ -128,5 +124,15 @@ namespace BlueWaterProject
} }
#endregion #endregion
/***********************************************************************
* Methods
***********************************************************************/
#region Methods
public virtual bool EnableSkill() => enableSkill;
public abstract void ActivateSkill(params Action[] actions);
#endregion
} }
} }

View File

@ -7,7 +7,7 @@ using UnityEngine;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace RhinocerosSkill namespace RhinocerosSkill
{ {
public class LineRush : SkillBase public class BoolCharge : BaseSkill
{ {
[Title("추가 옵션")] [Title("추가 옵션")]
[SerializeField] private bool isDrawingGizmo = true; [SerializeField] private bool isDrawingGizmo = true;
@ -15,12 +15,8 @@ namespace RhinocerosSkill
[SerializeField] private float rushSpeed = 15f; [SerializeField] private float rushSpeed = 15f;
[SerializeField] private float rushOffset = 3f; [SerializeField] private float rushOffset = 3f;
private bool isUsingSkill;
private Vector3 startPosition;
private float distanceToTarget;
private Vector3 direction;
private RaycastHit[] hits; private RaycastHit[] hits;
private bool isAttacked; private bool isUsingSkill;
private void OnDrawGizmos() private void OnDrawGizmos()
{ {
@ -36,21 +32,6 @@ namespace RhinocerosSkill
} }
} }
public override void ActivateSkill(params Action[] actions)
{
ReadySkill = false;
SkillInputData.PlayerAnimator.SetBool("isLineRush", true);
CoolDown(Cooldown, () => ReadySkill = true);
StartCoroutine(SkillCoroutine(actions));
}
public override bool EnableSkill()
{
if (!ReadySkill) return false;
return true;
}
protected override void BasicSetting() protected override void BasicSetting()
{ {
base.BasicSetting(); base.BasicSetting();
@ -58,32 +39,49 @@ namespace RhinocerosSkill
hits = new RaycastHit[5]; hits = new RaycastHit[5];
} }
private IEnumerator SkillCoroutine(params Action[] actions) public override void ActivateSkill(params Action[] actions)
{ {
while (!SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("LineRush")) enableSkill = false;
{
yield return null; StartCoroutine(SkillCoroutine(actions));
} }
private IEnumerator SkillCoroutine(params Action[] actions)
{
var iAnimationStateController = SkillInputData.IAnimationStateController;
iAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, 0);
var animationStarted = false;
yield return StartCoroutine(iAnimationStateController.WaitForAnimationToRun(RhinocerosAnimationName.BULL_CHARGE,
success => animationStarted = success));
if (!animationStarted)
{
EndSkill(0, actions[0]);
yield break;
}
iAnimationStateController.ResetAnimationSpeed();
isUsingSkill = true; isUsingSkill = true;
isAttacked = false; var isAttacked = false;
startPosition = SkillInputData.PlayerRb.position; var startPosition = SkillInputData.PlayerRb.position;
var vectorToTarget = SkillInputData.TargetCollider.transform.position - startPosition; var vectorToTarget = SkillInputData.TargetCollider.transform.position - startPosition;
vectorToTarget.y = 0f; vectorToTarget.y = 0f;
direction = vectorToTarget.normalized; var targetDirection = vectorToTarget.normalized;
distanceToTarget = vectorToTarget.magnitude + rushOffset; var targetDistance = vectorToTarget.magnitude + rushOffset;
//var endPosition = startPosition + targetDirection * targetDistance;
transform.position = startPosition; transform.position = startPosition + Vector3.up * 3f;
transform.localScale = new Vector3(width, 6f, distanceToTarget * 2); transform.localScale = new Vector3(width, 6f, targetDistance * 2);
var angle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg; var angle = Mathf.Atan2(targetDirection.x, targetDirection.z) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, angle, 0); transform.rotation = Quaternion.Euler(0, angle, 0);
actions[1].Invoke(); actions[1].Invoke();
ShowIndicator(); ShowIndicator();
var elapsedTime = 0f; var elapsedTime = 0f;
var fill = 1 / CastingTime; var fill = 1 / SkillData.CastingTime;
while (elapsedTime < CastingTime) while (elapsedTime < SkillData.CastingTime)
{ {
elapsedTime += Time.deltaTime; elapsedTime += Time.deltaTime;
@ -98,39 +96,35 @@ namespace RhinocerosSkill
HideIndicator(); HideIndicator();
SkillInputData.PlayerAgent.enabled = false; var timeToReachTarget = targetDistance / rushSpeed;
SkillInputData.PlayerRb.isKinematic = false;
var timeToReachTarget = distanceToTarget / rushSpeed;
elapsedTime = 0f;
var capsuleCollider = (CapsuleCollider)SkillInputData.PlayerCollider; var capsuleCollider = (CapsuleCollider)SkillInputData.PlayerCollider;
var capsuleRadius = capsuleCollider.radius; var capsuleRadius = capsuleCollider.radius;
while (elapsedTime < timeToReachTarget) elapsedTime = 0f;
while (elapsedTime <= timeToReachTarget)
{ {
SkillInputData.PlayerRb.velocity = direction * rushSpeed;
elapsedTime += Time.deltaTime; elapsedTime += Time.deltaTime;
SkillInputData.PlayerRb.velocity = targetDirection * rushSpeed;
var playerPosition = SkillInputData.PlayerRb.position; var playerPosition = SkillInputData.PlayerRb.position;
var point1 = playerPosition + Vector3.up * capsuleRadius; var point1 = playerPosition + Vector3.up * capsuleRadius;
var point2 = playerPosition + Vector3.up * (capsuleCollider.height - capsuleRadius); var point2 = playerPosition + Vector3.up * (capsuleCollider.height - capsuleRadius);
var maxSize = Physics.CapsuleCastNonAlloc(point1, point2, capsuleRadius, direction, hits, var hitCount = Physics.CapsuleCastNonAlloc(point1, point2, capsuleRadius, targetDirection, hits,
0f, SkillInputData.TargetLayer, QueryTriggerInteraction.Ignore); 0f, SkillInputData.TargetLayer, QueryTriggerInteraction.Ignore);
for (var i = 0; i < maxSize; i++) for (var i = 0; i < hitCount; i++)
{ {
if (!isAttacked) if (!isAttacked)
{ {
var iDamageable = hits[i].transform.GetComponent<IDamageable>(); var iDamageable = hits[i].transform.GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage); iDamageable?.TakeDamage(SkillData.Damage);
isAttacked = true; isAttacked = true;
var iCombatable = hits[i].transform.GetComponent<ICombatable>(); var combatStatus = hits[i].transform.GetComponent<CombatStatus>();
if (iCombatable != null) if (combatStatus != null)
{ {
var targetToVector = hits[i].transform.position - SkillInputData.PlayerRb.position; var targetToVector = hits[i].transform.position - SkillInputData.Transform.position;
targetToVector.y = 0f; targetToVector.y = 0f;
var hitDirection = targetToVector.normalized; var hitDirection = targetToVector.normalized;
var cross = Vector3.Cross(hitDirection, transform.forward); var cross = Vector3.Cross(hitDirection, transform.forward);
@ -138,8 +132,8 @@ namespace RhinocerosSkill
? Quaternion.Euler(0, -90, 0) * transform.forward ? Quaternion.Euler(0, -90, 0) * transform.forward
: Quaternion.Euler(0, 90, 0) * transform.forward; : Quaternion.Euler(0, 90, 0) * transform.forward;
iCombatable.DisableMove(0.05f); combatStatus.Stun(0.05f);
iCombatable.AddForceToDirection(addForceDirection, 30f); combatStatus.GetComponent<Rigidbody>().AddForce(addForceDirection * 30f, ForceMode.Impulse);
} }
} }
} }
@ -148,13 +142,17 @@ namespace RhinocerosSkill
} }
SkillInputData.PlayerRb.velocity = Vector3.zero; SkillInputData.PlayerRb.velocity = Vector3.zero;
SkillInputData.PlayerAgent.enabled = true; EndSkill(SkillData.Cooldown, actions[0]);
SkillInputData.PlayerRb.isKinematic = true; }
actions[0].Invoke();
private void EndSkill(float cooldown, Action action)
{
isUsingSkill = false; isUsingSkill = false;
SkillInputData.PlayerAnimator.SetBool("isLineRush", false);
SkillInputData.IAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, -1);
StartCoroutine(Utils.CoolDown(cooldown, () => enableSkill = true));
action?.Invoke();
} }
} }
} }

View File

@ -1,97 +0,0 @@
using System;
using System.Collections;
using BlueWaterProject;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace RhinocerosSkill
{
public class HammerAttack : SkillBase
{
[Title("추가 옵션")]
[SerializeField] private float hammerOffset = 3f;
private Collider[] hitColliders;
public override void ActivateSkill(params Action[] actions)
{
ReadySkill = false;
SkillInputData.PlayerAnimator.SetTrigger("isHammerAttack");
CoolDown(Cooldown, () => ReadySkill = true);
StartCoroutine(SkillCoroutine(actions));
}
public override bool EnableSkill()
{
if (!ReadySkill) return false;
return true;
}
protected override void BasicSetting()
{
base.BasicSetting();
hitColliders = new Collider[5];
}
private IEnumerator SkillCoroutine(params Action[] actions)
{
while (!SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("HammerAttack"))
{
yield return null;
}
var skillPlayerPosition = SkillInputData.PlayerCollider.transform.position;
var targetPosition = SkillInputData.TargetCollider.transform.position;
var targetToDirection = (targetPosition - skillPlayerPosition).normalized;
transform.position = skillPlayerPosition + targetToDirection * hammerOffset;
transform.localScale = Vector3.one * (Range * 2f);
actions[1].Invoke();
ShowIndicator();
var elapsedTime = 0f;
var fill = 1 / CastingTime;
while (elapsedTime < CastingTime)
{
elapsedTime += Time.deltaTime;
if (isUsingIndicator && indicator)
{
var fillValue = indicator.material.GetFloat(FillHash) + Time.deltaTime * fill;
indicator.material.SetFloat(FillHash, fillValue);
}
yield return null;
}
var maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < maxSize; i++)
{
var iDamageable = hitColliders[i].GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage);
var iCombatable = hitColliders[i].GetComponent<ICombatable>();
if (iCombatable != null)
{
var targetToVector = hitColliders[i].transform.position - transform.position;
targetToVector.y = 0f;
var direction = targetToVector.normalized;
iCombatable.DisableMove(0.05f);
iCombatable.AddForceToDirection(direction, 20f);
}
}
HideIndicator();
while (SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("HammerAttack") &&
SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f)
{
yield return null;
}
actions[0].Invoke();
}
}
}

View File

@ -0,0 +1,117 @@
using System;
using System.Collections;
using BlueWaterProject;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace RhinocerosSkill
{
public class HammerSlam : BaseSkill
{
[Title("추가 옵션")]
[SerializeField] private float hammerOffset = 3f;
private Collider[] hitColliders;
protected override void BasicSetting()
{
base.BasicSetting();
hitColliders = new Collider[5];
}
public override bool EnableSkill()
{
if (!enableSkill) return false;
var targetDistance = Vector3.Distance(SkillInputData.Transform.position,
SkillInputData.TargetCollider.transform.position);
return targetDistance <= SkillData.Range + hammerOffset;
}
public override void ActivateSkill(params Action[] actions)
{
enableSkill = false;
StartCoroutine(SkillCoroutine(actions));
}
private IEnumerator SkillCoroutine(params Action[] actions)
{
var iAnimationStateController = SkillInputData.IAnimationStateController;
iAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, 1);
var animationStarted = false;
yield return StartCoroutine(iAnimationStateController.WaitForAnimationToRun(RhinocerosAnimationName.HAMMER_SLAM,
success => animationStarted = success));
if (!animationStarted)
{
EndSkill(0, actions[0]);
yield break;
}
var startPosition = SkillInputData.Transform.position;
var targetPosition = SkillInputData.TargetCollider.transform.position;
var vectorToTarget = targetPosition - startPosition;
vectorToTarget.y = 0f;
var targetToDirection = vectorToTarget.normalized;
transform.position = startPosition + targetToDirection * hammerOffset;
transform.localScale = Vector3.one * (SkillData.Range * 2f);
actions[1].Invoke();
ShowIndicator();
var elapsedTime = 0f;
var fill = 1 / SkillData.CastingTime;
while (elapsedTime < SkillData.CastingTime)
{
elapsedTime += Time.deltaTime;
if (isUsingIndicator && indicator)
{
var fillValue = indicator.material.GetFloat(FillHash) + Time.deltaTime * fill;
indicator.material.SetFloat(FillHash, fillValue);
}
yield return null;
}
var hitCount = Physics.OverlapSphereNonAlloc(transform.position, SkillData.Range, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < hitCount; i++)
{
var iDamageable = hitColliders[i].GetComponent<IDamageable>();
iDamageable?.TakeDamage(SkillData.Damage);
var combatStatus = hitColliders[i].transform.GetComponent<CombatStatus>();
if (combatStatus != null)
{
var targetToVector = hitColliders[i].transform.position - transform.position;
targetToVector.y = 0f;
var direction = targetToVector.normalized;
combatStatus.Stun(0.05f);
combatStatus.GetComponent<Rigidbody>().AddForce(direction * 20f, ForceMode.Impulse);
}
}
HideIndicator();
while (SkillInputData.IAnimationStateController.IsComparingCurrentAnimation(RhinocerosAnimationName.HAMMER_SLAM)
&& SkillInputData.IAnimationStateController.GetCurrentAnimationNormalizedTime() <= 1f)
{
yield return null;
}
EndSkill(SkillData.Cooldown, actions[0]);
}
private void EndSkill(float cooldown, Action action)
{
SkillInputData.IAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, -1);
StartCoroutine(Utils.CoolDown(cooldown, () => enableSkill = true));
action?.Invoke();
}
}
}

View File

@ -8,7 +8,7 @@ using UnityEngine.Rendering.Universal;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace RhinocerosSkill namespace RhinocerosSkill
{ {
public class HammerSwing : SkillBase public class MeteorSwing : BaseSkill
{ {
[Title("추가 옵션")] [Title("추가 옵션")]
[SerializeField] private bool isDrawingGizmo = true; [SerializeField] private bool isDrawingGizmo = true;
@ -21,6 +21,7 @@ namespace RhinocerosSkill
[SerializeField] private float projectileAngle = 90f; [SerializeField] private float projectileAngle = 90f;
[SerializeField] private float projectileSpeed = 500f; [SerializeField] private float projectileSpeed = 500f;
private Transform particleInstantiateLocation;
private Collider[] hitColliders; private Collider[] hitColliders;
private bool isUsingSkill; private bool isUsingSkill;
@ -30,7 +31,7 @@ namespace RhinocerosSkill
Gizmos.color = Color.red; Gizmos.color = Color.red;
var skillPosition = transform.position; var skillPosition = transform.position;
Gizmos.DrawWireSphere(skillPosition, Range); Gizmos.DrawWireSphere(skillPosition, SkillData.Range);
if (SkillInputData != null && SkillInputData.TargetCollider != null) if (SkillInputData != null && SkillInputData.TargetCollider != null)
{ {
@ -40,26 +41,11 @@ namespace RhinocerosSkill
var rightBoundary = Quaternion.Euler(0, angle / 2, 0) * forward; var rightBoundary = Quaternion.Euler(0, angle / 2, 0) * forward;
Gizmos.color = Color.yellow; Gizmos.color = Color.yellow;
Gizmos.DrawLine(skillPlayerPosition, skillPlayerPosition + leftBoundary * Range); Gizmos.DrawLine(skillPlayerPosition, skillPlayerPosition + leftBoundary * SkillData.Range);
Gizmos.DrawLine(skillPlayerPosition, skillPlayerPosition + rightBoundary * Range); Gizmos.DrawLine(skillPlayerPosition, skillPlayerPosition + rightBoundary * SkillData.Range);
} }
} }
public override void ActivateSkill(params Action[] actions)
{
ReadySkill = false;
SkillInputData.PlayerAnimator.SetTrigger("isHammerSwing");
CoolDown(Cooldown, () => ReadySkill = true);
StartCoroutine(SkillCoroutine(actions));
}
public override bool EnableSkill()
{
if (!ReadySkill) return false;
return true;
}
protected override void BasicSetting() protected override void BasicSetting()
{ {
if (isUsingIndicator && indicator) if (isUsingIndicator && indicator)
@ -73,30 +59,45 @@ namespace RhinocerosSkill
hitColliders = new Collider[5]; hitColliders = new Collider[5];
} }
public override void ActivateSkill(params Action[] actions)
{
enableSkill = false;
StartCoroutine(SkillCoroutine(actions));
}
private IEnumerator SkillCoroutine(params Action[] actions) private IEnumerator SkillCoroutine(params Action[] actions)
{ {
while (!SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("HammerSwing")) var iAnimationStateController = SkillInputData.IAnimationStateController;
iAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, 2);
var animationStarted = false;
yield return StartCoroutine(iAnimationStateController.WaitForAnimationToRun(RhinocerosAnimationName.METEOR_SWING,
success => animationStarted = success));
if (!animationStarted)
{ {
yield return null; EndSkill(0, actions[0]);
yield break;
} }
isUsingSkill = true; isUsingSkill = true;
var skillPlayerPosition = SkillInputData.PlayerRb.position; var startPosition = SkillInputData.Transform.position;
var targetPosition = SkillInputData.TargetCollider.transform.position; var targetPosition = SkillInputData.TargetCollider.transform.position;
var targetToVector = targetPosition - skillPlayerPosition; var targetToVector = targetPosition - startPosition;
targetToVector.y = 0f; targetToVector.y = 0f;
var targetToDirection = targetToVector.normalized; var targetToDirection = targetToVector.normalized;
transform.position = skillPlayerPosition; transform.position = startPosition;
var yAngle = Mathf.Atan2(targetToDirection.x, targetToDirection.z) * Mathf.Rad2Deg; var yAngle = Mathf.Atan2(targetToDirection.x, targetToDirection.z) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, yAngle, 0); transform.rotation = Quaternion.Euler(0, yAngle, 0);
transform.localScale = Vector3.one * (Range * 2f); transform.localScale = Vector3.one * (SkillData.Range * 2f);
actions[1].Invoke(); actions[1].Invoke();
ShowIndicator(); ShowIndicator();
var elapsedTime = 0f; var elapsedTime = 0f;
var fill = 1 / CastingTime; var fill = 1 / SkillData.CastingTime;
while (elapsedTime < CastingTime) while (elapsedTime < SkillData.CastingTime)
{ {
elapsedTime += Time.deltaTime; elapsedTime += Time.deltaTime;
@ -109,8 +110,8 @@ namespace RhinocerosSkill
yield return null; yield return null;
} }
var maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range, hitColliders, SkillInputData.TargetLayer); var hitCount = Physics.OverlapSphereNonAlloc(transform.position, SkillData.Range, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < maxSize; i++) for (var i = 0; i < hitCount; i++)
{ {
var hitToVector = hitColliders[i].transform.position - transform.position; var hitToVector = hitColliders[i].transform.position - transform.position;
hitToVector.y = 0f; hitToVector.y = 0f;
@ -120,13 +121,13 @@ namespace RhinocerosSkill
if (angleToTarget <= angle * 0.5f) if (angleToTarget <= angle * 0.5f)
{ {
var iDamageable = hitColliders[i].GetComponent<IDamageable>(); var iDamageable = hitColliders[i].GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage); iDamageable?.TakeDamage(SkillData.Damage);
var iCombatable = hitColliders[i].GetComponent<ICombatable>(); var combatStatus = hitColliders[i].transform.GetComponent<CombatStatus>();
if (iCombatable != null) if (combatStatus != null)
{ {
iCombatable.DisableMove(0.1f); combatStatus.Stun(0.1f);
iCombatable.AddForceToDirection(attackDirection, 15f); combatStatus.GetComponent<Rigidbody>().AddForce(attackDirection * 15f, ForceMode.Impulse);
} }
} }
} }
@ -135,20 +136,29 @@ namespace RhinocerosSkill
var startAngle = yAngle - projectileAngle * 0.5f; var startAngle = yAngle - projectileAngle * 0.5f;
var angleStep = projectileAngle / (projectileNumber - 1); var angleStep = projectileAngle / (projectileNumber - 1);
particleInstantiateLocation ??= FindAnyObjectByType<RhinocerosBossMapController>().ParticleInstantiateLocation;
for (var i = 0; i < projectileNumber; i++) for (var i = 0; i < projectileNumber; i++)
{ {
var currentAngle = startAngle + angleStep * i; var currentAngle = startAngle + angleStep * i;
var rotation = Quaternion.Euler(0, currentAngle, 0); var rotation = Quaternion.Euler(0, currentAngle, 0);
var projectile = Instantiate(projectilePrefab, transform.position + Vector3.up, rotation); var projectile = Instantiate(projectilePrefab, transform.position + Vector3.up, rotation, particleInstantiateLocation);
var particleWeapon = projectile.GetComponent<ParticleWeapon>(); var particleWeapon = projectile.GetComponent<ParticleWeapon>();
particleWeapon.SetPower(projectileDamage); particleWeapon.SetPower(projectileDamage);
particleWeapon.Rb.AddForce(particleWeapon.transform.forward * projectileSpeed); particleWeapon.Rb.AddForce(particleWeapon.transform.forward * projectileSpeed);
} }
actions[0].Invoke(); EndSkill(SkillData.Cooldown, actions[0]);
}
private void EndSkill(float cooldown, Action action)
{
isUsingSkill = false; isUsingSkill = false;
SkillInputData.IAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, -1);
StartCoroutine(Utils.CoolDown(cooldown, () => enableSkill = true));
action?.Invoke();
} }
} }
} }

View File

@ -7,13 +7,14 @@ using UnityEngine;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace RhinocerosSkill namespace RhinocerosSkill
{ {
public class EarthquakeWave : SkillBase public class SeismicThrust : BaseSkill
{ {
[Title("추가 옵션")] [Title("추가 옵션")]
[SerializeField] private bool isDrawingGizmo = true; [SerializeField] private bool isDrawingGizmo = true;
[SerializeField] private float width = 3f; [SerializeField] private float width = 3f;
[SerializeField] private GameObject earthquakeParticlePrefab; [SerializeField] private GameObject earthquakeParticlePrefab;
private Transform particleInstantiateLocation;
private Vector3 startPosition; private Vector3 startPosition;
private Vector3 halfScale; private Vector3 halfScale;
private RaycastHit[] hits; private RaycastHit[] hits;
@ -29,20 +30,6 @@ namespace RhinocerosSkill
Gizmos.matrix = Matrix4x4.identity; Gizmos.matrix = Matrix4x4.identity;
} }
public override void ActivateSkill(params Action[] actions)
{
ReadySkill = false;
CoolDown(Cooldown, () => ReadySkill = true);
StartCoroutine(SkillCoroutine(actions));
}
public override bool EnableSkill()
{
if (!ReadySkill) return false;
return true;
}
protected override void BasicSetting() protected override void BasicSetting()
{ {
base.BasicSetting(); base.BasicSetting();
@ -50,14 +37,30 @@ namespace RhinocerosSkill
hits = new RaycastHit[5]; hits = new RaycastHit[5];
} }
public override bool EnableSkill()
{
if (!enableSkill) return false;
var targetDistance = Vector3.Distance(SkillInputData.Transform.position,
SkillInputData.TargetCollider.transform.position);
return targetDistance <= SkillData.Range;
}
public override void ActivateSkill(params Action[] actions)
{
enableSkill = false;
StartCoroutine(SkillCoroutine(actions));
}
private IEnumerator SkillCoroutine(params Action[] actions) private IEnumerator SkillCoroutine(params Action[] actions)
{ {
isUsingSkill = true; isUsingSkill = true;
transform.position = SkillInputData.PlayerRb.position; transform.position = SkillInputData.Transform.position;
var angle = Mathf.Atan2(SkillInputData.PreviousDirection.x, SkillInputData.PreviousDirection.z) * Mathf.Rad2Deg; var angle = Mathf.Atan2(SkillInputData.PreviousDirection.x, SkillInputData.PreviousDirection.z) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, angle, 0); transform.rotation = Quaternion.Euler(0, angle, 0);
transform.localScale = new Vector3(width, 6f, Range * 2); transform.localScale = new Vector3(width, 6f, SkillData.Range * 2);
var myLocalScale = transform.localScale; var myLocalScale = transform.localScale;
halfScale = new Vector3(myLocalScale.x * 0.5f, myLocalScale.y * 0.5f, myLocalScale.z * 0.25f); halfScale = new Vector3(myLocalScale.x * 0.5f, myLocalScale.y * 0.5f, myLocalScale.z * 0.25f);
@ -65,8 +68,8 @@ namespace RhinocerosSkill
ShowIndicator(); ShowIndicator();
var elapsedTime = 0f; var elapsedTime = 0f;
var fill = 1 / CastingTime; var fill = 1 / SkillData.CastingTime;
while (elapsedTime < CastingTime) while (elapsedTime < SkillData.CastingTime)
{ {
elapsedTime += Time.deltaTime; elapsedTime += Time.deltaTime;
@ -79,28 +82,33 @@ namespace RhinocerosSkill
yield return null; yield return null;
} }
Instantiate(earthquakeParticlePrefab, transform.position + transform.forward * 4f, transform.rotation); particleInstantiateLocation ??= FindAnyObjectByType<RhinocerosBossMapController>().ParticleInstantiateLocation;
Instantiate(earthquakeParticlePrefab, transform.position + transform.forward * 4f, transform.rotation, particleInstantiateLocation);
startPosition = transform.position + transform.forward * halfScale.z; startPosition = transform.position + transform.forward * halfScale.z;
var maxSize = Physics.BoxCastNonAlloc(startPosition, halfScale, transform.forward, var maxSize = Physics.BoxCastNonAlloc(startPosition, halfScale, transform.forward,
hits, transform.rotation, 0f, SkillInputData.TargetLayer, QueryTriggerInteraction.Ignore); hits, transform.rotation, 0f, SkillInputData.TargetLayer, QueryTriggerInteraction.Ignore);
for (var i = 0; i < maxSize; i++) for (var i = 0; i < maxSize; i++)
{ {
var iDamageable = hits[i].transform.GetComponent<IDamageable>(); var iDamageable = hits[i].transform.GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage); iDamageable?.TakeDamage(SkillData.Damage);
var iCombatable = hits[i].transform.GetComponent<ICombatable>(); var combatStatus = hits[i].transform.GetComponent<CombatStatus>();
if (iCombatable != null) if (combatStatus != null)
{ {
iCombatable.DisableMove(0.15f); combatStatus.Stun(0.15f);
iCombatable.AddForceToDirection(transform.forward, 20f); combatStatus.SlowMoveSpeed(5f, 0.5f);
combatStatus.GetComponent<Rigidbody>().AddForce(transform.forward * 20f, ForceMode.Impulse);
} }
} }
HideIndicator(); HideIndicator();
EndSkill(SkillData.Cooldown, actions[0]);
}
actions[0].Invoke(); private void EndSkill(float cooldown, Action action)
{
isUsingSkill = false; StartCoroutine(Utils.CoolDown(cooldown, () => enableSkill = true));
action?.Invoke();
} }
} }
} }

View File

@ -8,7 +8,7 @@ using UnityEngine.Rendering.Universal;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace RhinocerosSkill namespace RhinocerosSkill
{ {
public class JumpSmash : SkillBase public class SkyfallSmash : BaseSkill
{ {
[Title("추가 옵션")] [Title("추가 옵션")]
[SerializeField] private float upTime = 0.1f; [SerializeField] private float upTime = 0.1f;
@ -23,25 +23,10 @@ namespace RhinocerosSkill
{ {
if (SkillInputData.TargetCollider) if (SkillInputData.TargetCollider)
{ {
SkillInputData.TargetCollider.GetComponent<ICombatable>().StopStun(); SkillInputData.TargetCollider.GetComponent<CombatStatus>().EndStun();
} }
} }
public override void ActivateSkill(params Action[] actions)
{
ReadySkill = false;
SkillInputData.PlayerAnimator.SetBool("isJump", true);
CoolDown(Cooldown, () => ReadySkill = true);
StartCoroutine(SkillCoroutine(actions));
}
public override bool EnableSkill()
{
if (!ReadySkill) return false;
return true;
}
protected override void BasicSetting() protected override void BasicSetting()
{ {
if (isUsingIndicator) if (isUsingIndicator)
@ -64,24 +49,6 @@ namespace RhinocerosSkill
hitColliders = new Collider[5]; hitColliders = new Collider[5];
} }
protected override void HideIndicator()
{
if (isUsingIndicator)
{
if (indicator)
{
indicator.enabled = false;
indicator.material.SetFloat(FillHash, 0);
}
if (stunIndicator)
{
stunIndicator.enabled = false;
stunIndicator.material.SetFloat(FillHash, 0);
}
}
}
protected override void ShowIndicator() protected override void ShowIndicator()
{ {
if (isUsingIndicator) if (isUsingIndicator)
@ -100,20 +67,61 @@ namespace RhinocerosSkill
} }
} }
protected override void HideIndicator()
{
if (isUsingIndicator)
{
if (indicator)
{
indicator.enabled = false;
indicator.material.SetFloat(FillHash, 0);
}
if (stunIndicator)
{
stunIndicator.enabled = false;
stunIndicator.material.SetFloat(FillHash, 0);
}
}
}
public override bool EnableSkill()
{
if (!enableSkill) return false;
var targetDistance = Vector3.Distance(SkillInputData.Transform.position,
SkillInputData.TargetCollider.transform.position);
return targetDistance > 7f;
}
public override void ActivateSkill(params Action[] actions)
{
enableSkill = false;
StartCoroutine(SkillCoroutine(actions));
}
private IEnumerator SkillCoroutine(params Action[] actions) private IEnumerator SkillCoroutine(params Action[] actions)
{ {
while (!SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("Jump")) var iAnimationStateController = SkillInputData.IAnimationStateController;
iAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, 4);
var animationStarted = false;
yield return StartCoroutine(iAnimationStateController.WaitForAnimationToRun(RhinocerosAnimationName.SKY_FALL_JUMP,
success => animationStarted = success));
if (!animationStarted)
{
EndSkill(0, actions[0]);
yield break;
}
while (SkillInputData.IAnimationStateController.IsComparingCurrentAnimation(RhinocerosAnimationName.SKY_FALL_JUMP)
&& SkillInputData.IAnimationStateController.GetCurrentAnimationNormalizedTime() <= 1f)
{ {
yield return null; yield return null;
} }
while (SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("Jump") &&
SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f)
{
yield return null;
}
SkillInputData.PlayerAgent.enabled = false;
SkillInputData.PlayerRb.useGravity = false; SkillInputData.PlayerRb.useGravity = false;
var elapsedTime = 0f; var elapsedTime = 0f;
@ -123,18 +131,18 @@ namespace RhinocerosSkill
while (elapsedTime < upTime) while (elapsedTime < upTime)
{ {
elapsedTime += Time.deltaTime; elapsedTime += Time.deltaTime;
SkillInputData.PlayerRb.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / upTime); SkillInputData.Transform.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / upTime);
yield return null; yield return null;
} }
SkillInputData.PlayerRb.position = endPosition; SkillInputData.Transform.position = endPosition;
yield return new WaitForSeconds(waitTime); yield return new WaitForSeconds(waitTime);
var targetPosition = SkillInputData.TargetCollider.transform.position; var targetPosition = SkillInputData.TargetCollider.transform.position;
transform.position = targetPosition; transform.position = targetPosition;
transform.localScale = Vector3.one * (Range * 2f); transform.localScale = Vector3.one * (SkillData.Range * 2f);
stunIndicator.transform.localScale = Vector3.one * 4f; stunIndicator.transform.localScale = Vector3.one * 4f;
startPosition = targetPosition + Vector3.up * 15f; startPosition = targetPosition + Vector3.up * 15f;
@ -143,8 +151,8 @@ namespace RhinocerosSkill
ShowIndicator(); ShowIndicator();
elapsedTime = 0f; elapsedTime = 0f;
var fill = 1 / CastingTime; var fill = 1 / SkillData.CastingTime;
while (elapsedTime < CastingTime) while (elapsedTime < SkillData.CastingTime)
{ {
elapsedTime += Time.deltaTime; elapsedTime += Time.deltaTime;
@ -165,39 +173,36 @@ namespace RhinocerosSkill
yield return null; yield return null;
} }
//IgnoreCollision(true);
elapsedTime = 0f; elapsedTime = 0f;
while (elapsedTime < downTime) while (elapsedTime < downTime)
{ {
elapsedTime += Time.deltaTime; elapsedTime += Time.deltaTime;
SkillInputData.PlayerRb.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / downTime); SkillInputData.Transform.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / downTime);
yield return null; yield return null;
} }
VisualFeedbackManager.Inst.CameraShake(CameraManager.Inst.CombatCamera.BaseCombatCamera, 3f, 1f); VisualFeedbackManager.Inst.CameraShake(CameraManager.Inst.CombatCamera.BaseCombatCamera, 3f, 1f);
SkillInputData.PlayerRb.useGravity = true;
SkillInputData.PlayerAgent.enabled = true;
SkillInputData.PlayerRb.position = endPosition; SkillInputData.Transform.position = endPosition;
SkillInputData.PlayerRb.useGravity = true;
HideIndicator(); HideIndicator();
var maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range, hitColliders, SkillInputData.TargetLayer); var hitCount = Physics.OverlapSphereNonAlloc(transform.position, SkillData.Range, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < maxSize; i++) for (var i = 0; i < hitCount; i++)
{ {
var iDamageable = hitColliders[i].GetComponent<IDamageable>(); var iDamageable = hitColliders[i].GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage); iDamageable?.TakeDamage(SkillData.Damage);
} }
var stunRange = Range * 2f; var stunRange = SkillData.Range * 2f;
maxSize = Physics.OverlapSphereNonAlloc(transform.position, stunRange, hitColliders, SkillInputData.TargetLayer); hitCount = Physics.OverlapSphereNonAlloc(transform.position, stunRange, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < maxSize; i++) for (var i = 0; i < hitCount; i++)
{ {
var iCombatable = hitColliders[i].GetComponent<ICombatable>(); var combatStatus = hitColliders[i].transform.GetComponent<CombatStatus>();
if (iCombatable != null) if (combatStatus != null)
{ {
var targetToVector = hitColliders[i].transform.position - transform.position; var targetToVector = hitColliders[i].transform.position - transform.position;
targetToVector.y = 0f; targetToVector.y = 0f;
@ -207,20 +212,21 @@ namespace RhinocerosSkill
var powerCoefficient = stunRange - distance; var powerCoefficient = stunRange - distance;
var addForcePower = powerCoefficient / stunRange * 10f; var addForcePower = powerCoefficient / stunRange * 10f;
iCombatable.Stun(stunTime); combatStatus.Stun(stunTime);
iCombatable.AddForceToDirection(direction, addForcePower); combatStatus.GetComponent<Rigidbody>().AddForce(direction * addForcePower, ForceMode.Impulse);
} }
} }
SkillInputData.PlayerAnimator.SetBool("isJump", false); EndSkill(SkillData.Cooldown, actions[0]);
SkillInputData.PlayerAnimator.SetTrigger("isSmash");
actions[0].Invoke();
} }
private void IgnoreCollision(bool value) private void EndSkill(float cooldown, Action action)
{ {
Physics.IgnoreCollision(SkillInputData.PlayerCollider, SkillInputData.TargetCollider, value); SkillInputData.PlayerRb.useGravity = true;
SkillInputData.IAnimationStateController.SetAnimationParameter(RhinocerosAnimationParameter.SKILL_INDEX, -1);
StartCoroutine(Utils.CoolDown(cooldown, () => enableSkill = true));
action?.Invoke();
} }
} }
} }

View File

@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<Name>k__BackingField: "\uD669\uC18C \uB3CC\uC9C4" <Name>k__BackingField: "\uD669\uC18C \uB3CC\uC9C4"
<Description>k__BackingField: <Description>k__BackingField:
<Damage>k__BackingField: 10 <Damage>k__BackingField: 1
<Cooldown>k__BackingField: 6 <Cooldown>k__BackingField: 6
<Range>k__BackingField: 0 <Range>k__BackingField: 0
<CastingTime>k__BackingField: 1 <CastingTime>k__BackingField: 1

View File

@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<Name>k__BackingField: "\uB9DD\uCE58 \uAC15\uD0C0" <Name>k__BackingField: "\uB9DD\uCE58 \uAC15\uD0C0"
<Description>k__BackingField: <Description>k__BackingField:
<Damage>k__BackingField: 10 <Damage>k__BackingField: 1
<Cooldown>k__BackingField: 3 <Cooldown>k__BackingField: 3
<Range>k__BackingField: 3.5 <Range>k__BackingField: 3.5
<CastingTime>k__BackingField: 1 <CastingTime>k__BackingField: 1

View File

@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<Name>k__BackingField: "\uC720\uC131 \uD718\uB450\uB974\uAE30" <Name>k__BackingField: "\uC720\uC131 \uD718\uB450\uB974\uAE30"
<Description>k__BackingField: <Description>k__BackingField:
<Damage>k__BackingField: 10 <Damage>k__BackingField: 1
<Cooldown>k__BackingField: 10 <Cooldown>k__BackingField: 10
<Range>k__BackingField: 3 <Range>k__BackingField: 3
<CastingTime>k__BackingField: 1 <CastingTime>k__BackingField: 1

View File

@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<Name>k__BackingField: "\uC9C0\uC9C4 \uD30C\uB3D9" <Name>k__BackingField: "\uC9C0\uC9C4 \uD30C\uB3D9"
<Description>k__BackingField: <Description>k__BackingField:
<Damage>k__BackingField: 10 <Damage>k__BackingField: 1
<Cooldown>k__BackingField: 15 <Cooldown>k__BackingField: 15
<Range>k__BackingField: 12 <Range>k__BackingField: 12
<CastingTime>k__BackingField: 0.5 <CastingTime>k__BackingField: 0.5

View File

@ -10,11 +10,11 @@ MonoBehaviour:
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 134e3d2eb4ca75b4bb18832c2b875454, type: 3} m_Script: {fileID: 11500000, guid: 134e3d2eb4ca75b4bb18832c2b875454, type: 3}
m_Name: SkyfallSmash m_Name: SkyFallSmash
m_EditorClassIdentifier: m_EditorClassIdentifier:
<Name>k__BackingField: "\uCC3D\uACF5\uC758 \uB099\uD558" <Name>k__BackingField: "\uCC3D\uACF5\uC758 \uB099\uD558"
<Description>k__BackingField: <Description>k__BackingField:
<Damage>k__BackingField: 30 <Damage>k__BackingField: 2
<Cooldown>k__BackingField: 20 <Cooldown>k__BackingField: 20
<Range>k__BackingField: 5 <Range>k__BackingField: 5
<CastingTime>k__BackingField: 1 <CastingTime>k__BackingField: 1

View File

@ -1,16 +1,14 @@
using System.Collections;
using BlueWaterProject; using BlueWaterProject;
using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
public class RhinocerosBossMapController : BossMapController public class RhinocerosBossMapController : BossMapController
{ {
// 추가 설정
[Title("추가 설정")]
public override void InitBossMap() public override void InitBossMap()
{ {
base.InitBossMap(); base.InitBossMap();
DataManager.Inst.CurrentSaveStage = SaveStage.RHINOCEROS; DataManager.Inst.CurrentSaveStage = SaveStage.RHINOCEROS;
InstantiateRhinoceros(bossSpawnTransform.position); InstantiateRhinoceros(bossSpawnTransform.position);
} }
@ -24,4 +22,33 @@ public class RhinocerosBossMapController : BossMapController
return instantiateBoss; return instantiateBoss;
} }
public override void DieBoss()
{
StartCoroutine(nameof(DieBossCoroutine));
}
private IEnumerator DieBossCoroutine()
{
VisualFeedbackManager.Inst.SetBaseTimeScale(0.1f);
CombatUiManager.Inst.FadeInOut();
var elapsedTime = 0f;
while (elapsedTime <= 3f)
{
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
VisualFeedbackManager.Inst.SetBaseTimeScale(1f);
elapsedTime = 0f;
while (elapsedTime <= 2f)
{
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
AllDestroyBoss();
CombatUiManager.Inst.ClearPopupUi.Open();
}
} }

View File

@ -1,4 +1,3 @@
using System.Collections;
using BlueWaterProject; using BlueWaterProject;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
@ -16,6 +15,7 @@ public class SlimeBossMapController : BossMapController
public override void InitBossMap() public override void InitBossMap()
{ {
base.InitBossMap(); base.InitBossMap();
DataManager.Inst.CurrentSaveStage = SaveStage.SLIME; DataManager.Inst.CurrentSaveStage = SaveStage.SLIME;
InstantiateSlime(bossSpawnTransform.position, 1, true); InstantiateSlime(bossSpawnTransform.position, 1, true);
} }
@ -41,33 +41,4 @@ public class SlimeBossMapController : BossMapController
instantiateBossLeft.AddForce(leftSplitDirection, splitPower, ForceMode.Impulse); instantiateBossLeft.AddForce(leftSplitDirection, splitPower, ForceMode.Impulse);
instantiateBossRight.AddForce(rightSplitDirection, splitPower, ForceMode.Impulse); instantiateBossRight.AddForce(rightSplitDirection, splitPower, ForceMode.Impulse);
} }
public void DieRabbit()
{
StartCoroutine(nameof(DieRabbitCoroutine));
}
private IEnumerator DieRabbitCoroutine()
{
VisualFeedbackManager.Inst.SetBaseTimeScale(0.1f);
AllDestroyBoss();
CombatUiManager.Inst.FadeInOut();
var elapsedTime = 0f;
while (elapsedTime <= 3f)
{
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
VisualFeedbackManager.Inst.SetBaseTimeScale(1f);
elapsedTime = 0f;
while (elapsedTime <= 2f)
{
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
CombatUiManager.Inst.ClearPopupUi.Open();
}
} }

View File

@ -1,15 +1,21 @@
using System;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
using UnityEngine.UI;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace BlueWaterProject namespace BlueWaterProject
{ {
public class ClearPopupUi : PopupUi public class ClearPopupUi : PopupUi
{ {
[SerializeField] private Button moveNextStageButton;
public override void Open() public override void Open()
{ {
Time.timeScale = 0f; Time.timeScale = 0f;
FindAnyObjectByType<PlayerInput>().enabled = false; FindAnyObjectByType<PlayerInput>().enabled = false;
moveNextStageButton.interactable = (int)DataManager.Inst.CurrentSaveStage < Enum.GetValues(typeof(SaveStage)).Length - 1;
base.Open(); base.Open();
} }

View File

@ -11,7 +11,11 @@ namespace BlueWaterProject
if (!CombatUiManager.Inst.IsPopupListEmpty()) return; if (!CombatUiManager.Inst.IsPopupListEmpty()) return;
FindAnyObjectByType<PlayerInput>()?.SwitchCurrentActionMap(CombatInput.COMBAT); var playerInput = FindAnyObjectByType<PlayerInput>();
if (playerInput != null && playerInput.enabled)
{
playerInput.SwitchCurrentActionMap(CombatInput.COMBAT);
}
} }
} }
} }

View File

@ -11,8 +11,9 @@ GameObject:
- component: {fileID: 8090463508496005930} - component: {fileID: 8090463508496005930}
- component: {fileID: 8142684666082997760} - component: {fileID: 8142684666082997760}
- component: {fileID: 1668494360487994466} - component: {fileID: 1668494360487994466}
- component: {fileID: 1644346445915362573}
- component: {fileID: 5660425300834808149} - component: {fileID: 5660425300834808149}
- component: {fileID: 7016151840346596266}
- component: {fileID: 5720232464147060158}
- component: {fileID: 4327795848059932565} - component: {fileID: 4327795848059932565}
m_Layer: 13 m_Layer: 13
m_Name: Rhinoceros m_Name: Rhinoceros
@ -56,11 +57,11 @@ Rigidbody:
m_Bits: 0 m_Bits: 0
m_ExcludeLayers: m_ExcludeLayers:
serializedVersion: 2 serializedVersion: 2
m_Bits: 0 m_Bits: 33793783
m_ImplicitCom: 1 m_ImplicitCom: 1
m_ImplicitTensor: 1 m_ImplicitTensor: 1
m_UseGravity: 1 m_UseGravity: 1
m_IsKinematic: 1 m_IsKinematic: 0
m_Interpolate: 0 m_Interpolate: 0
m_Constraints: 112 m_Constraints: 112
m_CollisionDetection: 0 m_CollisionDetection: 0
@ -79,7 +80,7 @@ CapsuleCollider:
serializedVersion: 2 serializedVersion: 2
m_Bits: 0 m_Bits: 0
m_LayerOverridePriority: 0 m_LayerOverridePriority: 0
m_IsTrigger: 1 m_IsTrigger: 0
m_ProvidesContacts: 0 m_ProvidesContacts: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
@ -87,28 +88,6 @@ CapsuleCollider:
m_Height: 3 m_Height: 3
m_Direction: 1 m_Direction: 1
m_Center: {x: 0, y: 1.5, z: 0} m_Center: {x: 0, y: 1.5, z: 0}
--- !u!195 &1644346445915362573
NavMeshAgent:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1907803032604947452}
m_Enabled: 1
m_AgentTypeID: -334000983
m_Radius: 1.5
m_Speed: 3
m_Acceleration: 8
avoidancePriority: 50
m_AngularSpeed: 120
m_StoppingDistance: 0
m_AutoTraverseOffMeshLink: 1
m_AutoBraking: 0
m_AutoRepath: 1
m_Height: 3
m_BaseOffset: 0
m_WalkableMask: 1
m_ObstacleAvoidanceType: 4
--- !u!114 &5660425300834808149 --- !u!114 &5660425300834808149
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -121,7 +100,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8d7b55c7ecdb49a4a89fa5e6f9022861, type: 3} m_Script: {fileID: 11500000, guid: 8d7b55c7ecdb49a4a89fa5e6f9022861, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
startWhenEnabled: 1 startWhenEnabled: 0
asynchronousLoad: 0 asynchronousLoad: 0
pauseWhenDisabled: 0 pauseWhenDisabled: 0
restartWhenComplete: 0 restartWhenComplete: 0
@ -151,6 +130,76 @@ MonoBehaviour:
Version: 1.7.7 Version: 1.7.7
gizmoViewMode: 2 gizmoViewMode: 2
showBehaviorDesignerGizmo: 0 showBehaviorDesignerGizmo: 0
--- !u!114 &7016151840346596266
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1907803032604947452}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 373b52eb9bf8c40f785bb6947a1aee66, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 1
drawGizmos: 1
detailedGizmos: 0
startEndModifier:
addPoints: 0
exactStartPoint: 3
exactEndPoint: 3
useRaycasting: 0
mask:
serializedVersion: 2
m_Bits: 4294967295
useGraphRaycasting: 0
traversableTags: -1
tagPenalties: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
graphMask:
value: 4
--- !u!114 &5720232464147060158
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1907803032604947452}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f6eb1402c17e84a9282a7f0f62eb584f, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
radius: 1.5
height: 3
canMove: 1
maxSpeed: 3
gravity: {x: NaN, y: NaN, z: NaN}
groundMask:
serializedVersion: 2
m_Bits: 8
centerOffsetCompatibility: NaN
repathRateCompatibility: NaN
canSearchCompability: 0
orientation: 0
enableRotation: 0
autoRepath:
mode: 2
period: 0.5
sensitivity: 10
maximumPeriod: 2
visualizeSensitivity: 0
targetCompatibility: {fileID: 0}
maxAcceleration: 8
rotationSpeed: 360
slowdownDistance: 1
pickNextWaypointDist: 1
endReachedDistance: 0.5
alwaysDrawGizmos: 1
slowWhenNotFacingTarget: 1
whenCloseToDestination: 0
constrainInsideGraph: 0
--- !u!114 &4327795848059932565 --- !u!114 &4327795848059932565
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -164,29 +213,27 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
rb: {fileID: 8142684666082997760} rb: {fileID: 8142684666082997760}
capsuleCollider: {fileID: 1668494360487994466} col: {fileID: 1668494360487994466}
agent: {fileID: 1644346445915362573}
behaviorTree: {fileID: 5660425300834808149} behaviorTree: {fileID: 5660425300834808149}
visualLook: {fileID: 695049024773443745} visualLook: {fileID: 695049024773443745}
animator: {fileID: 3402580928633681741} <Anim>k__BackingField: {fileID: 3402580928633681741}
spriteRenderer: {fileID: 8089310337301863899} flashWhiteSpriteRenderer: {fileID: 8089310337301863899}
<Name>k__BackingField: Rhinoceros mapController: {fileID: 0}
<BossName>k__BackingField: "\uCF54\uBFD4\uC18C"
<MaxHp>k__BackingField: 500 <MaxHp>k__BackingField: 500
moveSpeed: 3
targetLayer: targetLayer:
serializedVersion: 2 serializedVersion: 2
m_Bits: 512 m_Bits: 512
flashWhiteTime: 0.1 flashWhiteTime: 0.1
skillList: skillList:
- {fileID: 302495082473197838, guid: 193b84f23515e2947ad12f1d574e6211, type: 3}
- {fileID: 1802435259650247748, guid: 62d1ce673ad01eb4197cabbcb20d42df, type: 3}
- {fileID: 7494133249431652556, guid: ed19d66520ef01542a4316e58fc998aa, type: 3} - {fileID: 7494133249431652556, guid: ed19d66520ef01542a4316e58fc998aa, type: 3}
- {fileID: 302495082473197838, guid: 193b84f23515e2947ad12f1d574e6211, type: 3}
- {fileID: 7312937513250846836, guid: 3353a318189ca914bba3a15574bf61fa, type: 3} - {fileID: 7312937513250846836, guid: 3353a318189ca914bba3a15574bf61fa, type: 3}
- {fileID: 1802435259650247748, guid: 62d1ce673ad01eb4197cabbcb20d42df, type: 3}
- {fileID: 7464818668275774481, guid: 16ce2ff029904874782380a8bed90c58, type: 3} - {fileID: 7464818668275774481, guid: 16ce2ff029904874782380a8bed90c58, type: 3}
<CurrentHp>k__BackingField: 0 <CurrentHp>k__BackingField: 0
<Target>k__BackingField: {fileID: 0} <Target>k__BackingField: {fileID: 0}
<IsUsingSkill>k__BackingField: 0 <IsActivatingSkill>k__BackingField: 0
isMoving: 0
--- !u!1 &5250888242721872286 --- !u!1 &5250888242721872286
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -10294,3 +10294,4 @@ MonoBehaviour:
<IsSlowedMoveSpeed>k__BackingField: 0 <IsSlowedMoveSpeed>k__BackingField: 0
<MoveSpeedCoefficient>k__BackingField: 0 <MoveSpeedCoefficient>k__BackingField: 0
slowColor: {r: 0.5921569, g: 0.9843137, b: 0.5882353, a: 1} slowColor: {r: 0.5921569, g: 0.9843137, b: 0.5882353, a: 1}
stunParticle: {fileID: 5631981413225627599}

View File

@ -11,7 +11,7 @@ GameObject:
- component: {fileID: 720733940719378981} - component: {fileID: 720733940719378981}
- component: {fileID: 7494133249431652556} - component: {fileID: 7494133249431652556}
m_Layer: 0 m_Layer: 0
m_Name: LineRush m_Name: BullCharge
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@ -45,16 +45,13 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 1f6a1d28ac8854842965166f68f3ab4b, type: 3} m_Script: {fileID: 11500000, guid: 1f6a1d28ac8854842965166f68f3ab4b, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<SkillName>k__BackingField: LineRush <SkillData>k__BackingField: {fileID: 11400000, guid: a73bd420075994a4da31c17857a68079,
<ReadySkill>k__BackingField: 1 type: 2}
<Damage>k__BackingField: 10 enableSkill: 1
<Cooldown>k__BackingField: 6
<Range>k__BackingField: 0
<CastingTime>k__BackingField: 1
<SkillDuration>k__BackingField: 0
isUsingIndicator: 1 isUsingIndicator: 1
indicator: {fileID: 3624644856654563365} indicator: {fileID: 3624644856654563365}
<SkillInputData>k__BackingField: <SkillInputData>k__BackingField:
<Transform>k__BackingField: {fileID: 0}
<PlayerCollider>k__BackingField: {fileID: 0} <PlayerCollider>k__BackingField: {fileID: 0}
<PlayerRb>k__BackingField: {fileID: 0} <PlayerRb>k__BackingField: {fileID: 0}
<PlayerAgent>k__BackingField: {fileID: 0} <PlayerAgent>k__BackingField: {fileID: 0}

View File

@ -11,7 +11,7 @@ GameObject:
- component: {fileID: 2292981380021792930} - component: {fileID: 2292981380021792930}
- component: {fileID: 302495082473197838} - component: {fileID: 302495082473197838}
m_Layer: 0 m_Layer: 0
m_Name: HammerAttack m_Name: HammerSlam
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@ -45,16 +45,13 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7f2a50b72621aac4f9178db7ab02867e, type: 3} m_Script: {fileID: 11500000, guid: 7f2a50b72621aac4f9178db7ab02867e, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<SkillName>k__BackingField: HammerAttack <SkillData>k__BackingField: {fileID: 11400000, guid: fff709d3ddb3f204b8b06337919d0d93,
<ReadySkill>k__BackingField: 1 type: 2}
<Damage>k__BackingField: 10 enableSkill: 1
<Cooldown>k__BackingField: 3
<Range>k__BackingField: 3.5
<CastingTime>k__BackingField: 1
<SkillDuration>k__BackingField: 0
isUsingIndicator: 1 isUsingIndicator: 1
indicator: {fileID: 7499300373520539281} indicator: {fileID: 7499300373520539281}
<SkillInputData>k__BackingField: <SkillInputData>k__BackingField:
<Transform>k__BackingField: {fileID: 0}
<PlayerCollider>k__BackingField: {fileID: 0} <PlayerCollider>k__BackingField: {fileID: 0}
<PlayerRb>k__BackingField: {fileID: 0} <PlayerRb>k__BackingField: {fileID: 0}
<PlayerAgent>k__BackingField: {fileID: 0} <PlayerAgent>k__BackingField: {fileID: 0}

View File

@ -11,7 +11,7 @@ GameObject:
- component: {fileID: 2292981380021792930} - component: {fileID: 2292981380021792930}
- component: {fileID: 7312937513250846836} - component: {fileID: 7312937513250846836}
m_Layer: 0 m_Layer: 0
m_Name: HammerSwing m_Name: MeteorSwing
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@ -45,16 +45,13 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0fde1b55379e6834585dfbadb4b7c0f2, type: 3} m_Script: {fileID: 11500000, guid: 0fde1b55379e6834585dfbadb4b7c0f2, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<SkillName>k__BackingField: HammerSwing <SkillData>k__BackingField: {fileID: 11400000, guid: a1e550fbbc57574438f4a11f19069b56,
<ReadySkill>k__BackingField: 1 type: 2}
<Damage>k__BackingField: 10 enableSkill: 1
<Cooldown>k__BackingField: 10
<Range>k__BackingField: 3
<CastingTime>k__BackingField: 1
<SkillDuration>k__BackingField: 0
isUsingIndicator: 1 isUsingIndicator: 1
indicator: {fileID: 7499300373520539281} indicator: {fileID: 7499300373520539281}
<SkillInputData>k__BackingField: <SkillInputData>k__BackingField:
<Transform>k__BackingField: {fileID: 0}
<PlayerCollider>k__BackingField: {fileID: 0} <PlayerCollider>k__BackingField: {fileID: 0}
<PlayerRb>k__BackingField: {fileID: 0} <PlayerRb>k__BackingField: {fileID: 0}
<PlayerAgent>k__BackingField: {fileID: 0} <PlayerAgent>k__BackingField: {fileID: 0}
@ -70,7 +67,7 @@ MonoBehaviour:
projectilePrefab: {fileID: 194276104676398060, guid: ea258dd5654a74c4aab409fd5d528b8f, projectilePrefab: {fileID: 194276104676398060, guid: ea258dd5654a74c4aab409fd5d528b8f,
type: 3} type: 3}
projectileNumber: 5 projectileNumber: 5
projectileDamage: 10 projectileDamage: 1
projectileAngle: 90 projectileAngle: 90
projectileSpeed: 500 projectileSpeed: 500
--- !u!1 &5490651391529734877 --- !u!1 &5490651391529734877

View File

@ -11,7 +11,7 @@ GameObject:
- component: {fileID: 2292981380021792930} - component: {fileID: 2292981380021792930}
- component: {fileID: 1802435259650247748} - component: {fileID: 1802435259650247748}
m_Layer: 0 m_Layer: 0
m_Name: EarthquakeWave m_Name: SeismicThrust
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@ -45,16 +45,13 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0bc3a312bfa527e45864c7d94466f674, type: 3} m_Script: {fileID: 11500000, guid: 0bc3a312bfa527e45864c7d94466f674, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<SkillName>k__BackingField: EarthquakeWave <SkillData>k__BackingField: {fileID: 11400000, guid: 0a8523f59e9007341b2679d088dbd569,
<ReadySkill>k__BackingField: 1 type: 2}
<Damage>k__BackingField: 10 enableSkill: 1
<Cooldown>k__BackingField: 15
<Range>k__BackingField: 12
<CastingTime>k__BackingField: 0.5
<SkillDuration>k__BackingField: 0
isUsingIndicator: 1 isUsingIndicator: 1
indicator: {fileID: 7499300373520539281} indicator: {fileID: 7499300373520539281}
<SkillInputData>k__BackingField: <SkillInputData>k__BackingField:
<Transform>k__BackingField: {fileID: 0}
<PlayerCollider>k__BackingField: {fileID: 0} <PlayerCollider>k__BackingField: {fileID: 0}
<PlayerRb>k__BackingField: {fileID: 0} <PlayerRb>k__BackingField: {fileID: 0}
<PlayerAgent>k__BackingField: {fileID: 0} <PlayerAgent>k__BackingField: {fileID: 0}

View File

@ -9808,7 +9808,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 1291595498312174027} - component: {fileID: 1291595498312174027}
m_Layer: 0 m_Layer: 0
m_Name: EarthquakeParticle m_Name: SeismicThrustParticle
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0

View File

@ -11,7 +11,7 @@ GameObject:
- component: {fileID: 2292981380021792930} - component: {fileID: 2292981380021792930}
- component: {fileID: 7464818668275774481} - component: {fileID: 7464818668275774481}
m_Layer: 0 m_Layer: 0
m_Name: JumpSmash m_Name: SkyFallSmash
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@ -46,16 +46,13 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ef339f855b0080641b375baefaddb1d0, type: 3} m_Script: {fileID: 11500000, guid: ef339f855b0080641b375baefaddb1d0, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
<SkillName>k__BackingField: JumpSmash <SkillData>k__BackingField: {fileID: 11400000, guid: f7fd16f319c8c024895abd3e2b395b3f,
<ReadySkill>k__BackingField: 1 type: 2}
<Damage>k__BackingField: 30 enableSkill: 1
<Cooldown>k__BackingField: 20
<Range>k__BackingField: 5
<CastingTime>k__BackingField: 1
<SkillDuration>k__BackingField: 0
isUsingIndicator: 1 isUsingIndicator: 1
indicator: {fileID: 7499300373520539281} indicator: {fileID: 7499300373520539281}
<SkillInputData>k__BackingField: <SkillInputData>k__BackingField:
<Transform>k__BackingField: {fileID: 0}
<PlayerCollider>k__BackingField: {fileID: 0} <PlayerCollider>k__BackingField: {fileID: 0}
<PlayerRb>k__BackingField: {fileID: 0} <PlayerRb>k__BackingField: {fileID: 0}
<PlayerAgent>k__BackingField: {fileID: 0} <PlayerAgent>k__BackingField: {fileID: 0}

View File

@ -21,41 +21,36 @@ MonoBehaviour:
startIndex: startIndex:
variableStartIndex: variableStartIndex:
JSONSerialization: '{"EntryTask":{"Type":"BehaviorDesigner.Runtime.Tasks.EntryTask","NodeData":{"Offset":"(707.6564,145.842773)"},"ID":0,"Name":"Entry","Instant":true},"RootTask":{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(3.069271,152.681244)"},"ID":1,"Name":"Start JSONSerialization: '{"EntryTask":{"Type":"BehaviorDesigner.Runtime.Tasks.EntryTask","NodeData":{"Offset":"(707.6564,145.842773)"},"ID":0,"Name":"Entry","Instant":true},"RootTask":{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(3.069271,152.681244)"},"ID":1,"Name":"Start
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(-213.843628,152.842773)"},"ID":2,"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":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-63.0232468,150)"},"ID":3,"Name":"Move Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(-213.843628,152.842773)"},"ID":2,"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":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-63.0232468,150)"},"ID":3,"Name":"Move
Target","Instant":true,"SinglestoppingDistance":3,"SinglelimitMovingTime":5},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(89.99982,145.294128)"},"ID":4,"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":"BehaviorDesigner.Runtime.Tasks.Repeater","NodeData":{"Offset":"(242.734253,146.666718)"},"ID":5,"Name":"Repeater","Instant":true,"SharedIntcount":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedBoolrepeatForever":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true},"SharedBoolendOnFailure":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(-3.44348145,154.9137)"},"ID":6,"Name":"Die Target","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(89.99982,145.294128)"},"ID":4,"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":"BehaviorDesigner.Runtime.Tasks.Repeater","NodeData":{"Offset":"(242.734253,146.666718)"},"ID":5,"Name":"Repeater","Instant":true,"SharedIntcount":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedBoolrepeatForever":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true},"SharedBoolendOnFailure":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(-3.44348145,154.9137)"},"ID":6,"Name":"Die
Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-547.465149,148.989136)"},"ID":7,"Name":"Die Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-547.465149,148.989136)"},"ID":7,"Name":"Die
Sequence","Instant":true,"AbortTypeabortType":"LowerPriority","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedFloat","NodeData":{"Offset":"(-102.993011,151.369934)","Comment":"CurrentHp Sequence","Instant":true,"AbortTypeabortType":"LowerPriority","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedFloat","NodeData":{"Offset":"(-102.993011,151.369934)","Comment":"CurrentHp
== 0"},"ID":8,"Name":"Compare Shared Float","Instant":true,"SharedFloatvariable":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},"SharedFloatcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0}},{"Type":"BehaviorDesigner.Runtime.Tasks.StopBehaviorTree","NodeData":{"Offset":"(83.47067,153.019165)"},"ID":9,"Name":"Stop == 0"},"ID":8,"Name":"Compare Shared Float","Instant":true,"SharedFloatvariable":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},"SharedFloatcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0}},{"Type":"BehaviorDesigner.Runtime.Tasks.StopBehaviorTree","NodeData":{"Offset":"(83.47067,153.019165)"},"ID":9,"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":10,"Name":"To 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":10,"Name":"Skill
Far Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.TargetDistance","NodeData":{"Offset":"(-113.882507,146.731567)"},"ID":11,"Name":"Target Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.UntilSuccess","NodeData":{"Offset":"(-4.999878,154.166809)"},"ID":11,"Name":"Until
Distance","Instant":true,"SinglecompareTo":7,"Inequalityinequality":"GREATER_THEN"},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(120.952148,151.429016)"},"ID":12,"Name":"Far Success","Instant":true,"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.RandomSelector","NodeData":{"Offset":"(-0.8695679,146.086731)"},"ID":12,"Name":"Random
Skill Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.UntilSuccess","NodeData":{"Offset":"(2.784546,145.445251)"},"ID":13,"Name":"Until Selector","Instant":true,"Int32seed":0,"BooleanuseSeed":false,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-1254.71313,148.733643)"},"ID":13,"Name":"Bull
Success","Instant":true,"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.RandomSelector","NodeData":{"Offset":"(-0.869564056,146.086731)"},"ID":14,"Name":"Random Charge","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-150,148.387054)"},"ID":14,"Name":"Enable
Selector","Instant":true,"Int32seed":0,"BooleanuseSeed":false,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-793.1756,148.733643)"},"ID":15,"Name":"Line Skill","Instant":true,"Int32skillIndex":0},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":15,"Name":"Activate
Rush","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-150,148.387054)"},"ID":16,"Name":"Enable Skill","Instant":true,"Int32skillIndex":0},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(154.705811,153.681122)"},"ID":16,"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":"(-771.158447,149.69397)"},"ID":17,"Name":"Hammer
Skill","Instant":true,"StringskillName":"LineRush"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":17,"Name":"Activate Slam","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-199.611115,153.471375)"},"ID":18,"Name":"Enable
Skill","Instant":true,"StringskillName":"LineRush"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(154.705811,153.681122)"},"ID":18,"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":"(-321.806763,147.857132)"},"ID":19,"Name":"Jump Skill","Instant":true,"Int32skillIndex":1},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-55.0359573,147.133621)"},"ID":19,"Name":"Activate
Smash","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-170,148.387054)"},"ID":20,"Name":"Enable Skill","Instant":true,"Int32skillIndex":1},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(108.787842,150.626709)"},"ID":20,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-138.169678,154.75708)"},"ID":21,"Name":"Seismic
Skill","Instant":true,"StringskillName":"JumpSmash"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":21,"Name":"Activate Thrust","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160,150)"},"ID":22,"Name":"Enable
Skill","Instant":true,"StringskillName":"JumpSmash"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(180,148.387054)"},"ID":22,"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":"(172.307724,150)"},"ID":23,"Name":"Hammer Skill","Instant":true,"Int32skillIndex":3},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-1.30444336,145.216064)"},"ID":23,"Name":"Activate
Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160,150)"},"ID":24,"Name":"Enable Skill","Instant":true,"Int32skillIndex":3},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(138.695557,145.216064)"},"ID":24,"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.Wait","NodeData":{"Offset":"(100,150)"},"ID":25,"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":"(284.843262,150)"},"ID":26,"Name":"Move
Skill","Instant":true,"StringskillName":"HammerSwing"},{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-42.5,147.5)"},"ID":25,"Name":"Move Meteor Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160,150)"},"ID":27,"Name":"Enable
Target","Instant":true,"SinglestoppingDistance":5,"SinglelimitMovingTime":2},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(75,150)"},"ID":26,"Name":"Activate Skill","Instant":true,"Int32skillIndex":2},{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-42.5,147.5)"},"ID":28,"Name":"Move
Skill","Instant":true,"StringskillName":"HammerSwing"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(190,150)"},"ID":27,"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":"(617.213257,152.801758)"},"ID":28,"Name":"Move Target","Instant":true},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(75,150)"},"ID":29,"Name":"Activate
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-88.4967041,148.38623)"},"ID":29,"Name":"Move Skill","Instant":true,"Int32skillIndex":2},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(190,150)"},"ID":30,"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":"(857.1762,147.857132)"},"ID":31,"Name":"Sky
Target","Instant":true,"SinglestoppingDistance":3,"SinglelimitMovingTime":5},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(112.150757,148.38623)"},"ID":30,"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":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(1299.83582,148.095245)"},"ID":31,"Name":"To Fall Smash","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-170,148.387054)"},"ID":32,"Name":"Enable
Near Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.UntilSuccess","NodeData":{"Offset":"(2.18457031,148.709717)"},"ID":32,"Name":"Until Skill","Instant":true,"Int32skillIndex":4},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":33,"Name":"Activate
Success","Instant":true,"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.RandomSelector","NodeData":{"Offset":"(0,150)"},"ID":33,"Name":"Random Skill","Instant":true,"Int32skillIndex":4},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(180,148.387054)"},"ID":34,"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":"(1291.7854,152.801758)"},"ID":35,"Name":"Move
Selector","Instant":true,"Int32seed":0,"BooleanuseSeed":false,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-158.571045,145.575439)"},"ID":34,"Name":"Hammer Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-88.4967041,148.38623)"},"ID":36,"Name":"Move
Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160.975586,151.666656)"},"ID":35,"Name":"Enable Target","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(112.150757,148.38623)"},"ID":37,"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}}]}]}]}]}]}]}]},"DetachedTasks":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(702.53656,1200)"},"ID":38,"Name":"Meteor
Skill","Instant":true,"StringskillName":"HammerSwing"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-1.95121193,151.666656)"},"ID":36,"Name":"Activate Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160.975586,151.666656)"},"ID":39,"Name":"Enable
Skill","Instant":true,"StringskillName":"HammerSwing"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(186.666687,151.666656)"},"ID":37,"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":"(437.314941,154.312485)"},"ID":38,"Name":"Hammer Skill","Instant":true,"Int32skillIndex":2},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-1.95121193,151.666656)"},"ID":40,"Name":"Activate
Attack","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-199.611115,153.471375)"},"ID":39,"Name":"Enable Skill","Instant":true,"Int32skillIndex":2},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(186.666687,151.666656)"},"ID":41,"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.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},{"Type":"BehaviorDesigner.Runtime.SharedVector3","Name":"MovePoint","IsShared":true,"Vector3mValue":"(0,0,0)"},{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"StoppingDistance","IsShared":true,"SinglemValue":0},{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":"isStartBehavior","IsShared":true,"BooleanmValue":false}]}'
Skill","Instant":true,"StringskillName":"HammerAttack"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-55.0359573,147.133621)"},"ID":40,"Name":"Activate
Skill","Instant":true,"StringskillName":"HammerAttack"},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(108.787842,150.626709)"},"ID":41,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-138.169678,154.75708)"},"ID":42,"Name":"Earthquake
Wave","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160,150)"},"ID":43,"Name":"Enable
Skill","Instant":true,"StringskillName":"EarthquakeWave"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-1.30444336,145.216064)"},"ID":44,"Name":"Activate
Skill","Instant":true,"StringskillName":"EarthquakeWave"},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(138.695557,145.216064)"},"ID":45,"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.Wait","NodeData":{"Offset":"(100,150)"},"ID":46,"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.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},{"Type":"BehaviorDesigner.Runtime.SharedVector3","Name":"MovePoint","IsShared":true,"Vector3mValue":"(0,0,0)"},{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"StoppingDistance","IsShared":true,"SinglemValue":0},{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":"isStartBehavior","IsShared":true,"BooleanmValue":false}]}'
fieldSerializationData: fieldSerializationData:
typeName: [] typeName: []
fieldNameHash: fieldNameHash:

View File

@ -6,7 +6,7 @@ AnimationClip:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: LineRush m_Name: BullCharge
serializedVersion: 7 serializedVersion: 7
m_Legacy: 0 m_Legacy: 0
m_Compressed: 0 m_Compressed: 0

View File

@ -6,7 +6,7 @@ AnimationClip:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: HammerAttack m_Name: HammerSlam
serializedVersion: 7 serializedVersion: 7
m_Legacy: 0 m_Legacy: 0
m_Compressed: 0 m_Compressed: 0

View File

@ -6,7 +6,7 @@ AnimationClip:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: HammerSwing m_Name: MeteorSwing
serializedVersion: 7 serializedVersion: 7
m_Legacy: 0 m_Legacy: 0
m_Compressed: 0 m_Compressed: 0

View File

@ -8,9 +8,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isJump m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 4
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7184740733897293241} m_DstState: {fileID: 7184740733897293241}
m_Solo: 0 m_Solo: 0
@ -32,7 +32,10 @@ AnimatorStateTransition:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: [] m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: -1
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6198737061502339589} m_DstState: {fileID: -6198737061502339589}
m_Solo: 0 m_Solo: 0
@ -42,7 +45,7 @@ AnimatorStateTransition:
m_TransitionDuration: 0 m_TransitionDuration: 0
m_TransitionOffset: 0 m_TransitionOffset: 0
m_ExitTime: 1 m_ExitTime: 1
m_HasExitTime: 1 m_HasExitTime: 0
m_HasFixedDuration: 0 m_HasFixedDuration: 0
m_InterruptionSource: 0 m_InterruptionSource: 0
m_OrderedInterruption: 1 m_OrderedInterruption: 1
@ -80,9 +83,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isJump m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 4
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7184740733897293241} m_DstState: {fileID: 7184740733897293241}
m_Solo: 0 m_Solo: 0
@ -136,7 +139,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Smash m_Name: SkyFallSmash
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
@ -217,8 +220,8 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isLineRush m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 0
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 738300769568541194} m_DstState: {fileID: 738300769568541194}
@ -241,7 +244,10 @@ AnimatorStateTransition:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: [] m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: -1
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6198737061502339589} m_DstState: {fileID: -6198737061502339589}
m_Solo: 0 m_Solo: 0
@ -251,7 +257,7 @@ AnimatorStateTransition:
m_TransitionDuration: 0 m_TransitionDuration: 0
m_TransitionOffset: 0 m_TransitionOffset: 0
m_ExitTime: 0.75409836 m_ExitTime: 0.75409836
m_HasExitTime: 1 m_HasExitTime: 0
m_HasFixedDuration: 0 m_HasFixedDuration: 0
m_InterruptionSource: 0 m_InterruptionSource: 0
m_OrderedInterruption: 1 m_OrderedInterruption: 1
@ -264,9 +270,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 2 - m_ConditionMode: 6
m_ConditionEvent: isLineRush m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: -1
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6198737061502339589} m_DstState: {fileID: -6198737061502339589}
m_Solo: 0 m_Solo: 0
@ -321,21 +327,18 @@ AnimatorStateMachine:
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: -5691180661881930344} m_State: {fileID: -5691180661881930344}
m_Position: {x: 600, y: 100, z: 0} m_Position: {x: 600, y: 100, z: 0}
- serializedVersion: 1
m_State: {fileID: 8724847276003412768}
m_Position: {x: 500, y: -10, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 7753610216372121977} m_State: {fileID: 7753610216372121977}
m_Position: {x: 200, y: -100, z: 0} m_Position: {x: 200, y: -100, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 6774117770736358250} m_State: {fileID: 6774117770736358250}
m_Position: {x: -100, y: 200, z: 0} m_Position: {x: 110, y: 260, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 738300769568541194} m_State: {fileID: 738300769568541194}
m_Position: {x: 180, y: 270, z: 0} m_Position: {x: -110, y: 200, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: -239926944250279742} m_State: {fileID: -239926944250279742}
m_Position: {x: 470, y: 270, z: 0} m_Position: {x: 460, y: 270, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 7184740733897293241} m_State: {fileID: 7184740733897293241}
m_Position: {x: 720, y: 200, z: 0} m_Position: {x: 720, y: 200, z: 0}
@ -360,7 +363,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: HammerSwing m_Name: MeteorSwing
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
@ -413,34 +416,10 @@ AnimatorController:
m_DefaultInt: 0 m_DefaultInt: 0
m_DefaultBool: 0 m_DefaultBool: 0
m_Controller: {fileID: 0} m_Controller: {fileID: 0}
- m_Name: isHammerAttack - m_Name: skillIndex
m_Type: 9 m_Type: 3
m_DefaultFloat: 0 m_DefaultFloat: 0
m_DefaultInt: 0 m_DefaultInt: -1
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: isLineRush
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: isHammerSwing
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: isJump
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: isSmash
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0 m_DefaultBool: 0
m_Controller: {fileID: 0} m_Controller: {fileID: 0}
m_AnimatorLayers: m_AnimatorLayers:
@ -510,7 +489,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: LineRush m_Name: BullCharge
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
@ -538,9 +517,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isHammerAttack m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 1
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6774117770736358250} m_DstState: {fileID: 6774117770736358250}
m_Solo: 0 m_Solo: 0
@ -563,9 +542,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isHammerSwing m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 2
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -239926944250279742} m_DstState: {fileID: -239926944250279742}
m_Solo: 0 m_Solo: 0
@ -588,9 +567,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isHammerSwing m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 2
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -239926944250279742} m_DstState: {fileID: -239926944250279742}
m_Solo: 0 m_Solo: 0
@ -660,12 +639,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 2 - m_ConditionMode: 6
m_ConditionEvent: isJump m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: -1
- m_ConditionMode: 1
m_ConditionEvent: isSmash
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -5694466715536734112} m_DstState: {fileID: -5694466715536734112}
m_Solo: 0 m_Solo: 0
@ -688,9 +664,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isHammerAttack m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 1
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6774117770736358250} m_DstState: {fileID: 6774117770736358250}
m_Solo: 0 m_Solo: 0
@ -712,7 +688,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: HammerAttack m_Name: HammerSlam
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
@ -739,7 +715,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Jump m_Name: SkyFallJump
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
@ -767,8 +743,8 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1 - m_ConditionMode: 6
m_ConditionEvent: isLineRush m_ConditionEvent: skillIndex
m_EventTreshold: 0 m_EventTreshold: 0
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 738300769568541194} m_DstState: {fileID: 738300769568541194}
@ -857,29 +833,3 @@ AnimatorStateTransition:
m_InterruptionSource: 0 m_InterruptionSource: 0
m_OrderedInterruption: 1 m_OrderedInterruption: 1
m_CanTransitionToSelf: 1 m_CanTransitionToSelf: 1
--- !u!1102 &8724847276003412768
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: TakeDamage
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 1585fad053ac2414096f7bea1f6a6209, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:

View File

@ -6,7 +6,7 @@ AnimationClip:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Jump m_Name: SkyFallJump
serializedVersion: 7 serializedVersion: 7
m_Legacy: 0 m_Legacy: 0
m_Compressed: 0 m_Compressed: 0

View File

@ -6,7 +6,7 @@ AnimationClip:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Smash m_Name: SkyFallSmash
serializedVersion: 7 serializedVersion: 7
m_Legacy: 0 m_Legacy: 0
m_Compressed: 0 m_Compressed: 0