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

View File

@ -10,7 +10,7 @@ namespace BlueWaterProject
[Serializable]
public class ActivateSkill : Action
{
[SerializeField] private string skillName;
[SerializeField] private int skillIndex;
private FieldBoss fieldBoss;
@ -21,12 +21,12 @@ namespace BlueWaterProject
public override void OnStart()
{
fieldBoss.ActivateSkill(skillName);
fieldBoss.ActivateSkill(skillIndex);
}
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 BehaviorDesigner.Runtime.Tasks;
using UnityEngine;
using Action = BehaviorDesigner.Runtime.Tasks.Action;
// ReSharper disable once CheckNamespace
@ -10,9 +9,6 @@ namespace BlueWaterProject
[Serializable]
public class MoveTarget : Action
{
[SerializeField] private float stoppingDistance;
[SerializeField] private float limitMovingTime;
private FieldBoss fieldBoss;
public override void OnAwake()
@ -22,12 +18,12 @@ namespace BlueWaterProject
public override void OnStart()
{
fieldBoss.MoveTarget(stoppingDistance);
fieldBoss.FollowTarget(fieldBoss.Target);
}
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]
public class EnableSkill : Conditional
{
[SerializeField] private string skillName;
[SerializeField] private int skillIndex;
private FieldBoss fieldBoss;
@ -20,7 +21,7 @@ namespace BlueWaterProject
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 BlueWaterProject;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
public class BossMapController : MonoBehaviour
public abstract class BossMapController : MonoBehaviour
{
/// 컴포넌트
[Title("컴포넌트")]
@ -34,7 +35,6 @@ public class BossMapController : MonoBehaviour
// 보스 override로 추가
}
public void AllDestroyBoss()
{
@ -56,4 +56,33 @@ public class BossMapController : MonoBehaviour
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;
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();
}
}

View File

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

View File

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

View File

@ -11,9 +11,9 @@ namespace BlueWaterProject
private Collider col;
private Rigidbody rb;
private Transform visualLook;
private Animator anim;
// Interfaces
private IAnimationStateController iAnimationStateController;
private IMeleeComboAttackable iMeleeComboAttackable;
// Variables
@ -31,17 +31,17 @@ namespace BlueWaterProject
private void Start()
{
iMeleeComboAttackable = GetComponent<IMeleeComboAttackable>();
iAnimationStateController = GetComponent<IAnimationStateController>();
InitSkill();
}
// Init methods
public void InitComponent(Collider collider, Rigidbody rigidbody, Transform visualLook, Animator animator)
public void InitComponent(Collider collider, Rigidbody rigidbody, Transform visualLook)
{
col = collider;
rb = rigidbody;
this.visualLook = visualLook;
anim = animator;
}
private void InitSkill()
@ -54,7 +54,8 @@ namespace BlueWaterProject
ui.ResetSkillUi();
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

View File

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

View File

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

View File

@ -1,19 +1,85 @@
using System;
using System.Collections.Generic;
using Pathfinding;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
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
***********************************************************************/
#region Variables
// 실시간 상태
[Title("실시간 상태")]
[SerializeField] private bool isMoving;
private bool isMoving;
public 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
@ -22,9 +88,18 @@ namespace BlueWaterProject
***********************************************************************/
#region Unity Events
private void Update()
protected override void Awake()
{
MoveHandler();
base.Awake();
InitDictionary();
}
protected override void Update()
{
HandleMovement();
base.Update();
}
#endregion
@ -33,7 +108,46 @@ namespace BlueWaterProject
* 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
@ -42,30 +156,163 @@ namespace BlueWaterProject
***********************************************************************/
#region Interfaces
[Button("Die Test")]
public override void Die()
{
isDead = true;
if (agent && agent.enabled)
{
agent.velocity = Vector3.zero;
agent.isStopped = true;
agent.enabled = false;
}
StopMovement();
if (rb)
{
rb.velocity = Vector3.zero;
rb.isKinematic = true;
}
SetAnimationTrigger(RhinocerosAnimationParameter.IS_DEAD);
base.Die();
}
if (capsuleCollider && capsuleCollider.enabled)
public override void MoveToPosition(Vector3 position)
{
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)
{
capsuleCollider.isTrigger = true;
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");
}
animator.SetTrigger("isDead");
Destroy(gameObject, 2f);
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
@ -75,48 +322,21 @@ namespace BlueWaterProject
***********************************************************************/
#region Methods
public override void ActivateSkill(string skillName)
private void HandleMovement()
{
IsUsingSkill = true;
skillDictionary[skillName].SkillInputData.PreviousDirection = PreviousDirection;
skillDictionary[skillName].ActivateSkill(
() => IsUsingSkill = false,
() => PreviousDirection = GetTargetDirection());
}
private void MoveHandler()
{
if (agent)
if (!ai.canMove) return;
currentMoveDirection = ai.velocity.normalized;
IsMoving = ai.velocity != Vector3.zero;
if (IsMoving)
{
//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);
PreviousMoveDirection = currentMoveDirection;
}
}
private void FlipVisualLook(float previousDirectionX)
public void SetTarget()
{
var localScale = visualLook.localScale;
localScale.x = previousDirectionX switch
{
> 0.01f => Mathf.Abs(localScale.x),
< -0.01f => -Mathf.Abs(localScale.x),
_ => localScale.x
};
visualLook.localScale = localScale;
Target = GameManager.Inst.CurrentCombatPlayer.GetComponent<Collider>();
}
#endregion

View File

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

View File

@ -39,7 +39,8 @@ namespace BlueWaterProject
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);
}
}

View File

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

View File

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

View File

@ -1,4 +1,5 @@
using System;
using Pathfinding;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.AI;
@ -20,11 +21,15 @@ namespace BlueWaterProject
[field: SerializeField] public Collider TargetCollider { get; set; }
[field: SerializeField] public LayerMask TargetLayer { 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 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;
PlayerCollider = collider;
@ -35,6 +40,8 @@ namespace BlueWaterProject
TargetCollider = target;
TargetLayer = layer;
SkillUi = ui;
IAnimationStateController = iAnimationStateController;
Ai = ai;
}
}
@ -78,27 +85,16 @@ namespace BlueWaterProject
#endregion
/***********************************************************************
* Interfaces
* Init methods
***********************************************************************/
#region Interfaces
public abstract void ActivateSkill(params Action[] actions);
public virtual bool EnableSkill() => enableSkill;
protected virtual void InitData()
{
BasicSetting();
HideIndicator();
}
#endregion
/***********************************************************************
* Methods
***********************************************************************/
#region Methods
protected virtual void BasicSetting()
{
if (isUsingIndicator && indicator)
@ -108,7 +104,7 @@ namespace BlueWaterProject
indicator.material.SetFloat(FillHash, 0f);
}
}
protected virtual void HideIndicator()
{
if (isUsingIndicator && indicator)
@ -128,5 +124,15 @@ namespace BlueWaterProject
}
#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
namespace RhinocerosSkill
{
public class LineRush : SkillBase
public class BoolCharge : BaseSkill
{
[Title("추가 옵션")]
[SerializeField] private bool isDrawingGizmo = true;
@ -15,12 +15,8 @@ namespace RhinocerosSkill
[SerializeField] private float rushSpeed = 15f;
[SerializeField] private float rushOffset = 3f;
private bool isUsingSkill;
private Vector3 startPosition;
private float distanceToTarget;
private Vector3 direction;
private RaycastHit[] hits;
private bool isAttacked;
private bool isUsingSkill;
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()
{
base.BasicSetting();
@ -58,32 +39,49 @@ namespace RhinocerosSkill
hits = new RaycastHit[5];
}
public override void ActivateSkill(params Action[] actions)
{
enableSkill = false;
StartCoroutine(SkillCoroutine(actions));
}
private IEnumerator SkillCoroutine(params Action[] actions)
{
while (!SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("LineRush"))
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)
{
yield return null;
EndSkill(0, actions[0]);
yield break;
}
iAnimationStateController.ResetAnimationSpeed();
isUsingSkill = true;
isAttacked = false;
startPosition = SkillInputData.PlayerRb.position;
var isAttacked = false;
var startPosition = SkillInputData.PlayerRb.position;
var vectorToTarget = SkillInputData.TargetCollider.transform.position - startPosition;
vectorToTarget.y = 0f;
direction = vectorToTarget.normalized;
distanceToTarget = vectorToTarget.magnitude + rushOffset;
var targetDirection = vectorToTarget.normalized;
var targetDistance = vectorToTarget.magnitude + rushOffset;
//var endPosition = startPosition + targetDirection * targetDistance;
transform.position = startPosition;
transform.localScale = new Vector3(width, 6f, distanceToTarget * 2);
var angle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg;
transform.position = startPosition + Vector3.up * 3f;
transform.localScale = new Vector3(width, 6f, targetDistance * 2);
var angle = Mathf.Atan2(targetDirection.x, targetDirection.z) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, angle, 0);
actions[1].Invoke();
ShowIndicator();
var elapsedTime = 0f;
var fill = 1 / CastingTime;
while (elapsedTime < CastingTime)
var fill = 1 / SkillData.CastingTime;
while (elapsedTime < SkillData.CastingTime)
{
elapsedTime += Time.deltaTime;
@ -98,39 +96,35 @@ namespace RhinocerosSkill
HideIndicator();
SkillInputData.PlayerAgent.enabled = false;
SkillInputData.PlayerRb.isKinematic = false;
var timeToReachTarget = distanceToTarget / rushSpeed;
elapsedTime = 0f;
var timeToReachTarget = targetDistance / rushSpeed;
var capsuleCollider = (CapsuleCollider)SkillInputData.PlayerCollider;
var capsuleRadius = capsuleCollider.radius;
while (elapsedTime < timeToReachTarget)
elapsedTime = 0f;
while (elapsedTime <= timeToReachTarget)
{
SkillInputData.PlayerRb.velocity = direction * rushSpeed;
elapsedTime += Time.deltaTime;
SkillInputData.PlayerRb.velocity = targetDirection * rushSpeed;
var playerPosition = SkillInputData.PlayerRb.position;
var point1 = playerPosition + Vector3.up * 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);
for (var i = 0; i < maxSize; i++)
for (var i = 0; i < hitCount; i++)
{
if (!isAttacked)
{
var iDamageable = hits[i].transform.GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage);
iDamageable?.TakeDamage(SkillData.Damage);
isAttacked = true;
var iCombatable = hits[i].transform.GetComponent<ICombatable>();
if (iCombatable != null)
var combatStatus = hits[i].transform.GetComponent<CombatStatus>();
if (combatStatus != null)
{
var targetToVector = hits[i].transform.position - SkillInputData.PlayerRb.position;
var targetToVector = hits[i].transform.position - SkillInputData.Transform.position;
targetToVector.y = 0f;
var hitDirection = targetToVector.normalized;
var cross = Vector3.Cross(hitDirection, transform.forward);
@ -138,23 +132,27 @@ namespace RhinocerosSkill
? Quaternion.Euler(0, -90, 0) * transform.forward
: Quaternion.Euler(0, 90, 0) * transform.forward;
iCombatable.DisableMove(0.05f);
iCombatable.AddForceToDirection(addForceDirection, 30f);
combatStatus.Stun(0.05f);
combatStatus.GetComponent<Rigidbody>().AddForce(addForceDirection * 30f, ForceMode.Impulse);
}
}
}
yield return null;
}
SkillInputData.PlayerRb.velocity = Vector3.zero;
SkillInputData.PlayerAgent.enabled = true;
SkillInputData.PlayerRb.isKinematic = true;
actions[0].Invoke();
SkillInputData.PlayerRb.velocity = Vector3.zero;
EndSkill(SkillData.Cooldown, actions[0]);
}
private void EndSkill(float cooldown, Action action)
{
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
namespace RhinocerosSkill
{
public class HammerSwing : SkillBase
public class MeteorSwing : BaseSkill
{
[Title("추가 옵션")]
[SerializeField] private bool isDrawingGizmo = true;
@ -20,7 +20,8 @@ namespace RhinocerosSkill
[SerializeField] private float projectileDamage = 10f;
[SerializeField] private float projectileAngle = 90f;
[SerializeField] private float projectileSpeed = 500f;
private Transform particleInstantiateLocation;
private Collider[] hitColliders;
private bool isUsingSkill;
@ -30,7 +31,7 @@ namespace RhinocerosSkill
Gizmos.color = Color.red;
var skillPosition = transform.position;
Gizmos.DrawWireSphere(skillPosition, Range);
Gizmos.DrawWireSphere(skillPosition, SkillData.Range);
if (SkillInputData != null && SkillInputData.TargetCollider != null)
{
@ -40,26 +41,11 @@ namespace RhinocerosSkill
var rightBoundary = Quaternion.Euler(0, angle / 2, 0) * forward;
Gizmos.color = Color.yellow;
Gizmos.DrawLine(skillPlayerPosition, skillPlayerPosition + leftBoundary * Range);
Gizmos.DrawLine(skillPlayerPosition, skillPlayerPosition + rightBoundary * Range);
Gizmos.DrawLine(skillPlayerPosition, skillPlayerPosition + leftBoundary * SkillData.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()
{
if (isUsingIndicator && indicator)
@ -72,31 +58,46 @@ namespace RhinocerosSkill
hitColliders = new Collider[5];
}
public override void ActivateSkill(params Action[] actions)
{
enableSkill = false;
StartCoroutine(SkillCoroutine(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;
var skillPlayerPosition = SkillInputData.PlayerRb.position;
var startPosition = SkillInputData.Transform.position;
var targetPosition = SkillInputData.TargetCollider.transform.position;
var targetToVector = targetPosition - skillPlayerPosition;
var targetToVector = targetPosition - startPosition;
targetToVector.y = 0f;
var targetToDirection = targetToVector.normalized;
transform.position = skillPlayerPosition;
transform.position = startPosition;
var yAngle = Mathf.Atan2(targetToDirection.x, targetToDirection.z) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, yAngle, 0);
transform.localScale = Vector3.one * (Range * 2f);
transform.localScale = Vector3.one * (SkillData.Range * 2f);
actions[1].Invoke();
ShowIndicator();
var elapsedTime = 0f;
var fill = 1 / CastingTime;
while (elapsedTime < CastingTime)
var fill = 1 / SkillData.CastingTime;
while (elapsedTime < SkillData.CastingTime)
{
elapsedTime += Time.deltaTime;
@ -109,8 +110,8 @@ namespace RhinocerosSkill
yield return null;
}
var maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < maxSize; i++)
var hitCount = Physics.OverlapSphereNonAlloc(transform.position, SkillData.Range, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < hitCount; i++)
{
var hitToVector = hitColliders[i].transform.position - transform.position;
hitToVector.y = 0f;
@ -120,13 +121,13 @@ namespace RhinocerosSkill
if (angleToTarget <= angle * 0.5f)
{
var iDamageable = hitColliders[i].GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage);
iDamageable?.TakeDamage(SkillData.Damage);
var iCombatable = hitColliders[i].GetComponent<ICombatable>();
if (iCombatable != null)
var combatStatus = hitColliders[i].transform.GetComponent<CombatStatus>();
if (combatStatus != null)
{
iCombatable.DisableMove(0.1f);
iCombatable.AddForceToDirection(attackDirection, 15f);
combatStatus.Stun(0.1f);
combatStatus.GetComponent<Rigidbody>().AddForce(attackDirection * 15f, ForceMode.Impulse);
}
}
}
@ -135,20 +136,29 @@ namespace RhinocerosSkill
var startAngle = yAngle - projectileAngle * 0.5f;
var angleStep = projectileAngle / (projectileNumber - 1);
particleInstantiateLocation ??= FindAnyObjectByType<RhinocerosBossMapController>().ParticleInstantiateLocation;
for (var i = 0; i < projectileNumber; i++)
{
var currentAngle = startAngle + angleStep * i;
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>();
particleWeapon.SetPower(projectileDamage);
particleWeapon.Rb.AddForce(particleWeapon.transform.forward * projectileSpeed);
}
actions[0].Invoke();
EndSkill(SkillData.Cooldown, actions[0]);
}
private void EndSkill(float cooldown, Action action)
{
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
namespace RhinocerosSkill
{
public class EarthquakeWave : SkillBase
public class SeismicThrust : BaseSkill
{
[Title("추가 옵션")]
[SerializeField] private bool isDrawingGizmo = true;
[SerializeField] private float width = 3f;
[SerializeField] private GameObject earthquakeParticlePrefab;
private Transform particleInstantiateLocation;
private Vector3 startPosition;
private Vector3 halfScale;
private RaycastHit[] hits;
@ -29,35 +30,37 @@ namespace RhinocerosSkill
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()
{
base.BasicSetting();
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)
{
isUsingSkill = true;
transform.position = SkillInputData.PlayerRb.position;
transform.position = SkillInputData.Transform.position;
var angle = Mathf.Atan2(SkillInputData.PreviousDirection.x, SkillInputData.PreviousDirection.z) * Mathf.Rad2Deg;
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;
halfScale = new Vector3(myLocalScale.x * 0.5f, myLocalScale.y * 0.5f, myLocalScale.z * 0.25f);
@ -65,8 +68,8 @@ namespace RhinocerosSkill
ShowIndicator();
var elapsedTime = 0f;
var fill = 1 / CastingTime;
while (elapsedTime < CastingTime)
var fill = 1 / SkillData.CastingTime;
while (elapsedTime < SkillData.CastingTime)
{
elapsedTime += Time.deltaTime;
@ -79,28 +82,33 @@ namespace RhinocerosSkill
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;
var maxSize = Physics.BoxCastNonAlloc(startPosition, halfScale, transform.forward,
hits, transform.rotation, 0f, SkillInputData.TargetLayer, QueryTriggerInteraction.Ignore);
for (var i = 0; i < maxSize; i++)
{
var iDamageable = hits[i].transform.GetComponent<IDamageable>();
iDamageable?.TakeDamage(Damage);
iDamageable?.TakeDamage(SkillData.Damage);
var iCombatable = hits[i].transform.GetComponent<ICombatable>();
if (iCombatable != null)
var combatStatus = hits[i].transform.GetComponent<CombatStatus>();
if (combatStatus != null)
{
iCombatable.DisableMove(0.15f);
iCombatable.AddForceToDirection(transform.forward, 20f);
combatStatus.Stun(0.15f);
combatStatus.SlowMoveSpeed(5f, 0.5f);
combatStatus.GetComponent<Rigidbody>().AddForce(transform.forward * 20f, ForceMode.Impulse);
}
}
HideIndicator();
actions[0].Invoke();
isUsingSkill = false;
EndSkill(SkillData.Cooldown, actions[0]);
}
private void EndSkill(float cooldown, Action action)
{
StartCoroutine(Utils.CoolDown(cooldown, () => enableSkill = true));
action?.Invoke();
}
}
}

View File

@ -8,7 +8,7 @@ using UnityEngine.Rendering.Universal;
// ReSharper disable once CheckNamespace
namespace RhinocerosSkill
{
public class JumpSmash : SkillBase
public class SkyfallSmash : BaseSkill
{
[Title("추가 옵션")]
[SerializeField] private float upTime = 0.1f;
@ -23,24 +23,9 @@ namespace RhinocerosSkill
{
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()
{
@ -64,6 +49,24 @@ namespace RhinocerosSkill
hitColliders = new Collider[5];
}
protected override void ShowIndicator()
{
if (isUsingIndicator)
{
if (indicator)
{
indicator.material.SetFloat(FillHash, 0);
indicator.enabled = true;
}
if (stunIndicator)
{
stunIndicator.material.SetFloat(FillHash, 0);
stunIndicator.enabled = true;
}
}
}
protected override void HideIndicator()
{
if (isUsingIndicator)
@ -82,38 +85,43 @@ namespace RhinocerosSkill
}
}
protected override void ShowIndicator()
public override bool EnableSkill()
{
if (isUsingIndicator)
{
if (indicator)
{
indicator.material.SetFloat(FillHash, 0);
indicator.enabled = true;
}
if (stunIndicator)
{
stunIndicator.material.SetFloat(FillHash, 0);
stunIndicator.enabled = true;
}
}
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)
{
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;
}
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;
var elapsedTime = 0f;
@ -123,18 +131,18 @@ namespace RhinocerosSkill
while (elapsedTime < upTime)
{
elapsedTime += Time.deltaTime;
SkillInputData.PlayerRb.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / upTime);
SkillInputData.Transform.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / upTime);
yield return null;
}
SkillInputData.PlayerRb.position = endPosition;
SkillInputData.Transform.position = endPosition;
yield return new WaitForSeconds(waitTime);
var targetPosition = SkillInputData.TargetCollider.transform.position;
transform.position = targetPosition;
transform.localScale = Vector3.one * (Range * 2f);
transform.localScale = Vector3.one * (SkillData.Range * 2f);
stunIndicator.transform.localScale = Vector3.one * 4f;
startPosition = targetPosition + Vector3.up * 15f;
@ -143,8 +151,8 @@ namespace RhinocerosSkill
ShowIndicator();
elapsedTime = 0f;
var fill = 1 / CastingTime;
while (elapsedTime < CastingTime)
var fill = 1 / SkillData.CastingTime;
while (elapsedTime < SkillData.CastingTime)
{
elapsedTime += Time.deltaTime;
@ -164,40 +172,37 @@ namespace RhinocerosSkill
yield return null;
}
//IgnoreCollision(true);
elapsedTime = 0f;
while (elapsedTime < downTime)
{
elapsedTime += Time.deltaTime;
SkillInputData.PlayerRb.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / downTime);
SkillInputData.Transform.position = Vector3.Lerp(startPosition, endPosition, elapsedTime / downTime);
yield return null;
}
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();
var maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < maxSize; i++)
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(Damage);
iDamageable?.TakeDamage(SkillData.Damage);
}
var stunRange = Range * 2f;
maxSize = Physics.OverlapSphereNonAlloc(transform.position, stunRange, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < maxSize; i++)
var stunRange = SkillData.Range * 2f;
hitCount = Physics.OverlapSphereNonAlloc(transform.position, stunRange, hitColliders, SkillInputData.TargetLayer);
for (var i = 0; i < hitCount; i++)
{
var iCombatable = hitColliders[i].GetComponent<ICombatable>();
if (iCombatable != null)
var combatStatus = hitColliders[i].transform.GetComponent<CombatStatus>();
if (combatStatus != null)
{
var targetToVector = hitColliders[i].transform.position - transform.position;
targetToVector.y = 0f;
@ -207,20 +212,21 @@ namespace RhinocerosSkill
var powerCoefficient = stunRange - distance;
var addForcePower = powerCoefficient / stunRange * 10f;
iCombatable.Stun(stunTime);
iCombatable.AddForceToDirection(direction, addForcePower);
combatStatus.Stun(stunTime);
combatStatus.GetComponent<Rigidbody>().AddForce(direction * addForcePower, ForceMode.Impulse);
}
}
SkillInputData.PlayerAnimator.SetBool("isJump", false);
SkillInputData.PlayerAnimator.SetTrigger("isSmash");
actions[0].Invoke();
EndSkill(SkillData.Cooldown, actions[0]);
}
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:
<Name>k__BackingField: "\uD669\uC18C \uB3CC\uC9C4"
<Description>k__BackingField:
<Damage>k__BackingField: 10
<Damage>k__BackingField: 1
<Cooldown>k__BackingField: 6
<Range>k__BackingField: 0
<CastingTime>k__BackingField: 1

View File

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

View File

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

View File

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

View File

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

View File

@ -1,16 +1,14 @@
using System.Collections;
using BlueWaterProject;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
public class RhinocerosBossMapController : BossMapController
{
// 추가 설정
[Title("추가 설정")]
public override void InitBossMap()
{
base.InitBossMap();
DataManager.Inst.CurrentSaveStage = SaveStage.RHINOCEROS;
InstantiateRhinoceros(bossSpawnTransform.position);
}
@ -24,4 +22,33 @@ public class RhinocerosBossMapController : BossMapController
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 Sirenix.OdinInspector;
using UnityEngine;
@ -16,6 +15,7 @@ public class SlimeBossMapController : BossMapController
public override void InitBossMap()
{
base.InitBossMap();
DataManager.Inst.CurrentSaveStage = SaveStage.SLIME;
InstantiateSlime(bossSpawnTransform.position, 1, true);
}
@ -41,33 +41,4 @@ public class SlimeBossMapController : BossMapController
instantiateBossLeft.AddForce(leftSplitDirection, 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.InputSystem;
using UnityEngine.UI;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class ClearPopupUi : PopupUi
{
[SerializeField] private Button moveNextStageButton;
public override void Open()
{
Time.timeScale = 0f;
FindAnyObjectByType<PlayerInput>().enabled = false;
moveNextStageButton.interactable = (int)DataManager.Inst.CurrentSaveStage < Enum.GetValues(typeof(SaveStage)).Length - 1;
base.Open();
}

View File

@ -11,7 +11,11 @@ namespace BlueWaterProject
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: 8142684666082997760}
- component: {fileID: 1668494360487994466}
- component: {fileID: 1644346445915362573}
- component: {fileID: 5660425300834808149}
- component: {fileID: 7016151840346596266}
- component: {fileID: 5720232464147060158}
- component: {fileID: 4327795848059932565}
m_Layer: 13
m_Name: Rhinoceros
@ -56,11 +57,11 @@ Rigidbody:
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_Bits: 33793783
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 1
m_IsKinematic: 1
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 112
m_CollisionDetection: 0
@ -79,7 +80,7 @@ CapsuleCollider:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
@ -87,28 +88,6 @@ CapsuleCollider:
m_Height: 3
m_Direction: 1
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
MonoBehaviour:
m_ObjectHideFlags: 0
@ -121,7 +100,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8d7b55c7ecdb49a4a89fa5e6f9022861, type: 3}
m_Name:
m_EditorClassIdentifier:
startWhenEnabled: 1
startWhenEnabled: 0
asynchronousLoad: 0
pauseWhenDisabled: 0
restartWhenComplete: 0
@ -151,6 +130,76 @@ MonoBehaviour:
Version: 1.7.7
gizmoViewMode: 2
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
MonoBehaviour:
m_ObjectHideFlags: 0
@ -164,29 +213,27 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
rb: {fileID: 8142684666082997760}
capsuleCollider: {fileID: 1668494360487994466}
agent: {fileID: 1644346445915362573}
col: {fileID: 1668494360487994466}
behaviorTree: {fileID: 5660425300834808149}
visualLook: {fileID: 695049024773443745}
animator: {fileID: 3402580928633681741}
spriteRenderer: {fileID: 8089310337301863899}
<Name>k__BackingField: Rhinoceros
<Anim>k__BackingField: {fileID: 3402580928633681741}
flashWhiteSpriteRenderer: {fileID: 8089310337301863899}
mapController: {fileID: 0}
<BossName>k__BackingField: "\uCF54\uBFD4\uC18C"
<MaxHp>k__BackingField: 500
moveSpeed: 3
targetLayer:
serializedVersion: 2
m_Bits: 512
flashWhiteTime: 0.1
skillList:
- {fileID: 302495082473197838, guid: 193b84f23515e2947ad12f1d574e6211, type: 3}
- {fileID: 1802435259650247748, guid: 62d1ce673ad01eb4197cabbcb20d42df, type: 3}
- {fileID: 7494133249431652556, guid: ed19d66520ef01542a4316e58fc998aa, type: 3}
- {fileID: 302495082473197838, guid: 193b84f23515e2947ad12f1d574e6211, type: 3}
- {fileID: 7312937513250846836, guid: 3353a318189ca914bba3a15574bf61fa, type: 3}
- {fileID: 1802435259650247748, guid: 62d1ce673ad01eb4197cabbcb20d42df, type: 3}
- {fileID: 7464818668275774481, guid: 16ce2ff029904874782380a8bed90c58, type: 3}
<CurrentHp>k__BackingField: 0
<Target>k__BackingField: {fileID: 0}
<IsUsingSkill>k__BackingField: 0
isMoving: 0
<IsActivatingSkill>k__BackingField: 0
--- !u!1 &5250888242721872286
GameObject:
m_ObjectHideFlags: 0

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -21,41 +21,36 @@ MonoBehaviour:
startIndex:
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
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
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
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},{"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
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
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
Far Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.TargetDistance","NodeData":{"Offset":"(-113.882507,146.731567)"},"ID":11,"Name":"Target
Distance","Instant":true,"SinglecompareTo":7,"Inequalityinequality":"GREATER_THEN"},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(120.952148,151.429016)"},"ID":12,"Name":"Far
Skill Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.UntilSuccess","NodeData":{"Offset":"(2.784546,145.445251)"},"ID":13,"Name":"Until
Success","Instant":true,"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.RandomSelector","NodeData":{"Offset":"(-0.869564056,146.086731)"},"ID":14,"Name":"Random
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
Rush","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-150,148.387054)"},"ID":16,"Name":"Enable
Skill","Instant":true,"StringskillName":"LineRush"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":17,"Name":"Activate
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
Smash","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-170,148.387054)"},"ID":20,"Name":"Enable
Skill","Instant":true,"StringskillName":"JumpSmash"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":21,"Name":"Activate
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
Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160,150)"},"ID":24,"Name":"Enable
Skill","Instant":true,"StringskillName":"HammerSwing"},{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-42.5,147.5)"},"ID":25,"Name":"Move
Target","Instant":true,"SinglestoppingDistance":5,"SinglelimitMovingTime":2},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(75,150)"},"ID":26,"Name":"Activate
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
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-88.4967041,148.38623)"},"ID":29,"Name":"Move
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
Near Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.UntilSuccess","NodeData":{"Offset":"(2.18457031,148.709717)"},"ID":32,"Name":"Until
Success","Instant":true,"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.RandomSelector","NodeData":{"Offset":"(0,150)"},"ID":33,"Name":"Random
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
Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160.975586,151.666656)"},"ID":35,"Name":"Enable
Skill","Instant":true,"StringskillName":"HammerSwing"},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-1.95121193,151.666656)"},"ID":36,"Name":"Activate
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
Attack","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-199.611115,153.471375)"},"ID":39,"Name":"Enable
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}]}'
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
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.UntilSuccess","NodeData":{"Offset":"(-4.999878,154.166809)"},"ID":11,"Name":"Until
Success","Instant":true,"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.RandomSelector","NodeData":{"Offset":"(-0.8695679,146.086731)"},"ID":12,"Name":"Random
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
Charge","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-150,148.387054)"},"ID":14,"Name":"Enable
Skill","Instant":true,"Int32skillIndex":0},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":15,"Name":"Activate
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
Slam","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-199.611115,153.471375)"},"ID":18,"Name":"Enable
Skill","Instant":true,"Int32skillIndex":1},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-55.0359573,147.133621)"},"ID":19,"Name":"Activate
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
Thrust","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160,150)"},"ID":22,"Name":"Enable
Skill","Instant":true,"Int32skillIndex":3},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-1.30444336,145.216064)"},"ID":23,"Name":"Activate
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
Meteor Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160,150)"},"ID":27,"Name":"Enable
Skill","Instant":true,"Int32skillIndex":2},{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-42.5,147.5)"},"ID":28,"Name":"Move
Target","Instant":true},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(75,150)"},"ID":29,"Name":"Activate
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
Fall Smash","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-170,148.387054)"},"ID":32,"Name":"Enable
Skill","Instant":true,"Int32skillIndex":4},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(0,148.387054)"},"ID":33,"Name":"Activate
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
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.MoveTarget","NodeData":{"Offset":"(-88.4967041,148.38623)"},"ID":36,"Name":"Move
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
Swing","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.EnableSkill","NodeData":{"Offset":"(-160.975586,151.666656)"},"ID":39,"Name":"Enable
Skill","Instant":true,"Int32skillIndex":2},{"Type":"BlueWaterProject.ActivateSkill","NodeData":{"Offset":"(-1.95121193,151.666656)"},"ID":40,"Name":"Activate
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}]}'
fieldSerializationData:
typeName: []
fieldNameHash:

View File

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

View File

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

View File

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

View File

@ -8,9 +8,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isJump
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 4
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7184740733897293241}
m_Solo: 0
@ -32,7 +32,10 @@ AnimatorStateTransition:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: -1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6198737061502339589}
m_Solo: 0
@ -42,7 +45,7 @@ AnimatorStateTransition:
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 1
m_HasExitTime: 1
m_HasExitTime: 0
m_HasFixedDuration: 0
m_InterruptionSource: 0
m_OrderedInterruption: 1
@ -80,9 +83,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isJump
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 4
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7184740733897293241}
m_Solo: 0
@ -136,7 +139,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Smash
m_Name: SkyFallSmash
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
@ -217,8 +220,8 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isLineRush
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 738300769568541194}
@ -241,7 +244,10 @@ AnimatorStateTransition:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: -1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6198737061502339589}
m_Solo: 0
@ -251,7 +257,7 @@ AnimatorStateTransition:
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.75409836
m_HasExitTime: 1
m_HasExitTime: 0
m_HasFixedDuration: 0
m_InterruptionSource: 0
m_OrderedInterruption: 1
@ -264,9 +270,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 2
m_ConditionEvent: isLineRush
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: -1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6198737061502339589}
m_Solo: 0
@ -321,21 +327,18 @@ AnimatorStateMachine:
- serializedVersion: 1
m_State: {fileID: -5691180661881930344}
m_Position: {x: 600, y: 100, z: 0}
- serializedVersion: 1
m_State: {fileID: 8724847276003412768}
m_Position: {x: 500, y: -10, z: 0}
- serializedVersion: 1
m_State: {fileID: 7753610216372121977}
m_Position: {x: 200, y: -100, z: 0}
- serializedVersion: 1
m_State: {fileID: 6774117770736358250}
m_Position: {x: -100, y: 200, z: 0}
m_Position: {x: 110, y: 260, z: 0}
- serializedVersion: 1
m_State: {fileID: 738300769568541194}
m_Position: {x: 180, y: 270, z: 0}
m_Position: {x: -110, y: 200, z: 0}
- serializedVersion: 1
m_State: {fileID: -239926944250279742}
m_Position: {x: 470, y: 270, z: 0}
m_Position: {x: 460, y: 270, z: 0}
- serializedVersion: 1
m_State: {fileID: 7184740733897293241}
m_Position: {x: 720, y: 200, z: 0}
@ -360,7 +363,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HammerSwing
m_Name: MeteorSwing
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
@ -413,34 +416,10 @@ AnimatorController:
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: isHammerAttack
m_Type: 9
- m_Name: skillIndex
m_Type: 3
m_DefaultFloat: 0
m_DefaultInt: 0
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_DefaultInt: -1
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_AnimatorLayers:
@ -510,7 +489,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LineRush
m_Name: BullCharge
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
@ -538,9 +517,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isHammerAttack
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6774117770736358250}
m_Solo: 0
@ -563,9 +542,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isHammerSwing
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 2
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -239926944250279742}
m_Solo: 0
@ -588,9 +567,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isHammerSwing
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 2
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -239926944250279742}
m_Solo: 0
@ -660,12 +639,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 2
m_ConditionEvent: isJump
m_EventTreshold: 0
- m_ConditionMode: 1
m_ConditionEvent: isSmash
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: -1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -5694466715536734112}
m_Solo: 0
@ -688,9 +664,9 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isHammerAttack
m_EventTreshold: 0
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6774117770736358250}
m_Solo: 0
@ -712,7 +688,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HammerAttack
m_Name: HammerSlam
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
@ -739,7 +715,7 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Jump
m_Name: SkyFallJump
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
@ -767,8 +743,8 @@ AnimatorStateTransition:
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isLineRush
- m_ConditionMode: 6
m_ConditionEvent: skillIndex
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 738300769568541194}
@ -857,29 +833,3 @@ AnimatorStateTransition:
m_InterruptionSource: 0
m_OrderedInterruption: 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_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Jump
m_Name: SkyFallJump
serializedVersion: 7
m_Legacy: 0
m_Compressed: 0

View File

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