2026-05-19 무기추가
진행중인 사항 - InputManager + .inputactions: WeaponSlot1/2/3 액션 추가, 키 1/2/3 매핑 PlayerController 통합: Player에 PlayerWeaponInventory 컴포넌트 자동 부착 OnWeaponChanged 구독 → idle/walk State 이름 동적 교체 OnPunchInput 분기: 무장 시 weapon.AttackRootNode 사용 WeaponSlot 입력 핸들러 3개 추가 (EquipUnarmed / EquipSlot(0) / EquipSlot(1))
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
// 공격 판정 영역의 도형. Circle은 원거리 균등 판정, Box는 길쭉한 직선/넓은 부채꼴에 적합.
|
||||
public enum HitShape
|
||||
{
|
||||
Circle,
|
||||
Box
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// ActionData
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -44,8 +51,10 @@ public class ActionData : ScriptableObject
|
||||
// ─── 공격 판정 (HasHit=true일 때 적용) ─────────────────────────────
|
||||
[Header("Hit")]
|
||||
public bool HasHit = true; // 이 액션이 데미지를 주는지
|
||||
public HitShape Shape = HitShape.Circle; // Circle = Radius 사용, Box = HitSize 사용
|
||||
public Vector2 Offset = new Vector2(0.5f, 0f); // 캐릭터 기준 hit 영역 중심 (X는 facing 방향)
|
||||
public float Radius = 0.5f; // hit 영역 반경 (AttackHitbox.CircleCollider2D)
|
||||
public float Radius = 0.5f; // Circle일 때 사용하는 반경
|
||||
public Vector2 HitSize = new Vector2(1f, 0.5f); // Box일 때 사용하는 가로/세로 크기
|
||||
public int Damage = 10; // 데미지 양
|
||||
public float HitTiming = 0.15f; // 액션 시작 후 hit 발동까지 시간 (선딜)
|
||||
public float HitDuration = 0f; // hit 영역이 활성 상태로 유지되는 시간 (0이면 단발)
|
||||
|
||||
@@ -20,7 +20,11 @@ public class AttackHitbox : MonoBehaviour
|
||||
// PlayerController가 구독해서 "방금 hit한 적" 추적용 (잡기 타겟 우선 등에 활용).
|
||||
public event System.Action<IDamageable> OnHit;
|
||||
|
||||
private CircleCollider2D _collider;
|
||||
private CircleCollider2D _circleCollider; // Circle 모양 판정용
|
||||
private BoxCollider2D _boxCollider; // Box 모양 판정용 (Awake에서 자동 생성)
|
||||
private HitShape _activeShape; // 현재 활성 도형 (ScanImmediateOverlap에서 분기)
|
||||
private float _activeRadius; // Circle일 때 사용하는 반경 (스캔/Gizmo용 백업)
|
||||
private Vector2 _activeHitSize; // Box일 때 사용하는 크기 백업
|
||||
|
||||
// ─── 현재 활성 액션의 데미지/효과 데이터 (Activate에서 세팅) ─────────
|
||||
private int _damage;
|
||||
@@ -39,18 +43,43 @@ public class AttackHitbox : MonoBehaviour
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_collider = GetComponent<CircleCollider2D>();
|
||||
// 플레이어 몸체는 적과 물리 충돌하지 않으므로, 공격 판정은 이 트리거만 사용한다.
|
||||
_collider.isTrigger = true;
|
||||
_collider.enabled = false;
|
||||
_circleCollider = GetComponent<CircleCollider2D>();
|
||||
// 플레이어 몸체는 적과 물리 충돌하지 않으므로, 공격 판정은 트리거만 사용.
|
||||
_circleCollider.isTrigger = true;
|
||||
_circleCollider.enabled = false;
|
||||
|
||||
// BoxCollider2D는 없으면 자동 추가. 기존 프리팹과의 호환성 유지.
|
||||
_boxCollider = GetComponent<BoxCollider2D>();
|
||||
if (_boxCollider == null)
|
||||
_boxCollider = gameObject.AddComponent<BoxCollider2D>();
|
||||
_boxCollider.isTrigger = true;
|
||||
_boxCollider.enabled = false;
|
||||
}
|
||||
|
||||
// 액션 시작 시 호출. 위치/반경/데미지 등 모든 파라미터 세팅 후 콜라이더 활성화.
|
||||
// 액션 시작 시 호출. 도형/위치/데미지 세팅 후 해당 콜라이더만 활성화.
|
||||
// _alreadyHit를 클리어해서 새 공격으로 다시 hit 가능하게 함.
|
||||
public void Activate(ActionData data, Vector2 localPosition, Vector2 hitVelocity, Vector2 sourcePosition, Vector2? hitTargetPosition, bool correctHitTargetY, int hitPositionSolidMask, LayerMask targetLayer)
|
||||
{
|
||||
transform.localPosition = localPosition;
|
||||
_collider.radius = data.Radius;
|
||||
|
||||
// 도형에 맞는 콜라이더만 활성화. 다른 도형 콜라이더는 비활성으로 보장.
|
||||
_activeShape = data.Shape;
|
||||
if (data.Shape == HitShape.Box)
|
||||
{
|
||||
_boxCollider.size = data.HitSize;
|
||||
_boxCollider.offset = Vector2.zero;
|
||||
_boxCollider.enabled = true;
|
||||
_circleCollider.enabled = false;
|
||||
_activeHitSize = data.HitSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
_circleCollider.radius = data.Radius;
|
||||
_circleCollider.enabled = true;
|
||||
_boxCollider.enabled = false;
|
||||
_activeRadius = data.Radius;
|
||||
}
|
||||
|
||||
_damage = data.Damage;
|
||||
_hitVelocity = hitVelocity;
|
||||
_hitSourcePosition = sourcePosition;
|
||||
@@ -62,24 +91,27 @@ public void Activate(ActionData data, Vector2 localPosition, Vector2 hitVelocity
|
||||
_hitReactionState = data.HitReactionAnimationState;
|
||||
_targetLayer = targetLayer;
|
||||
_alreadyHit.Clear();
|
||||
_collider.enabled = true;
|
||||
|
||||
// 판정이 켜진 순간 이미 범위 안에 있던 적도 같은 프레임에 잡아낸다.
|
||||
ScanImmediateOverlap();
|
||||
}
|
||||
|
||||
// 액션의 HitDuration이 끝나면 호출. 콜라이더 비활성화 + hit 기록 초기화.
|
||||
// 액션의 HitDuration이 끝나면 호출. 모든 콜라이더 비활성화 + hit 기록 초기화.
|
||||
public void Deactivate()
|
||||
{
|
||||
_collider.enabled = false;
|
||||
_circleCollider.enabled = false;
|
||||
_boxCollider.enabled = false;
|
||||
_alreadyHit.Clear();
|
||||
}
|
||||
|
||||
// 활성 순간 즉시 검사: Physics2D.OverlapCircleAll로 현재 겹친 콜라이더를 모두 가져와 TryDamage.
|
||||
// 활성 순간 즉시 검사: 도형에 맞는 OverlapAll로 현재 겹친 콜라이더를 모두 가져와 TryDamage.
|
||||
// 이게 없으면 짧은 hit window (예: HitDuration=0.02)에 OnTriggerEnter가 못 따라옴.
|
||||
private void ScanImmediateOverlap()
|
||||
{
|
||||
Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, _collider.radius, _targetLayer);
|
||||
Collider2D[] hits = _activeShape == HitShape.Box
|
||||
? Physics2D.OverlapBoxAll(transform.position, _activeHitSize, 0f, _targetLayer)
|
||||
: Physics2D.OverlapCircleAll(transform.position, _activeRadius, _targetLayer);
|
||||
|
||||
foreach (var hit in hits)
|
||||
TryDamage(hit);
|
||||
}
|
||||
|
||||
78
Assets/02_Scripts/Combat/PlayerWeaponInventory.cs
Normal file
78
Assets/02_Scripts/Combat/PlayerWeaponInventory.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
// ============================================================================
|
||||
// PlayerWeaponInventory
|
||||
// ----------------------------------------------------------------------------
|
||||
// 플레이어가 보유한 무기 목록 + 현재 장착 무기 관리.
|
||||
// PlayerController가 OnWeaponChanged 이벤트를 구독해서 애니메이션/공격 콤보 교체.
|
||||
//
|
||||
// 슬롯 매핑 (외부 코드의 EquipSlot 인덱스):
|
||||
// -1 → 맨손 (CurrentWeapon == null)
|
||||
// 0 → 첫 번째로 픽업한 무기
|
||||
// 1 → 두 번째로 픽업한 무기
|
||||
// ...
|
||||
//
|
||||
// 입력 키 매핑 (PlayerController에서 처리):
|
||||
// Key 1 → EquipUnarmed()
|
||||
// Key 2 → EquipSlot(0)
|
||||
// Key 3 → EquipSlot(1)
|
||||
// ============================================================================
|
||||
public class PlayerWeaponInventory : MonoBehaviour
|
||||
{
|
||||
private readonly List<WeaponData> _weapons = new();
|
||||
private int _currentIndex = -1; // -1 = 맨손
|
||||
|
||||
// 무기 교체 시 발화. null이면 맨손.
|
||||
public event Action<WeaponData> OnWeaponChanged;
|
||||
|
||||
public WeaponData CurrentWeapon =>
|
||||
_currentIndex >= 0 && _currentIndex < _weapons.Count
|
||||
? _weapons[_currentIndex]
|
||||
: null;
|
||||
public bool IsArmed => CurrentWeapon != null;
|
||||
public int Count => _weapons.Count;
|
||||
|
||||
// 무기 추가. 이미 보유 중이면 false 반환 (중복 픽업 방지).
|
||||
// 첫 픽업 시 자동 장착할지는 호출자가 OnWeaponChanged를 보고 결정.
|
||||
public bool Pickup(WeaponData weapon)
|
||||
{
|
||||
if (weapon == null) return false;
|
||||
if (_weapons.Contains(weapon)) return false;
|
||||
|
||||
_weapons.Add(weapon);
|
||||
|
||||
// 첫 픽업이면 자동으로 장착해주면 사용자 편의 ↑.
|
||||
if (_weapons.Count == 1 && _currentIndex == -1)
|
||||
{
|
||||
_currentIndex = 0;
|
||||
OnWeaponChanged?.Invoke(_weapons[0]);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 맨손 상태로 전환.
|
||||
public void EquipUnarmed()
|
||||
{
|
||||
if (_currentIndex == -1) return;
|
||||
_currentIndex = -1;
|
||||
OnWeaponChanged?.Invoke(null);
|
||||
}
|
||||
|
||||
// 슬롯 번호로 직접 장착. 슬롯이 비어있으면 무시.
|
||||
public void EquipSlot(int slotIndex)
|
||||
{
|
||||
if (slotIndex < 0 || slotIndex >= _weapons.Count) return;
|
||||
if (_currentIndex == slotIndex) return;
|
||||
_currentIndex = slotIndex;
|
||||
OnWeaponChanged?.Invoke(_weapons[slotIndex]);
|
||||
}
|
||||
|
||||
// 디버그용: 슬롯에 해당 무기가 있는지 확인.
|
||||
public bool HasWeaponInSlot(int slotIndex)
|
||||
{
|
||||
return slotIndex >= 0 && slotIndex < _weapons.Count && _weapons[slotIndex] != null;
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Combat/PlayerWeaponInventory.cs.meta
Normal file
2
Assets/02_Scripts/Combat/PlayerWeaponInventory.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b8fc250baa41ff840a2b5d6a0b308081
|
||||
39
Assets/02_Scripts/Combat/WeaponData.cs
Normal file
39
Assets/02_Scripts/Combat/WeaponData.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using UnityEngine;
|
||||
|
||||
// ============================================================================
|
||||
// WeaponType
|
||||
// ----------------------------------------------------------------------------
|
||||
// 무기 분류. 향후 다른 시스템(예: 데미지 면역, 약점)에서 분기용으로 사용.
|
||||
// ============================================================================
|
||||
public enum WeaponType
|
||||
{
|
||||
Sword,
|
||||
Gun
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// WeaponData
|
||||
// ----------------------------------------------------------------------------
|
||||
// 무기 한 종류의 정의를 담은 ScriptableObject.
|
||||
// .asset 파일로 만들어 적의 드랍 슬롯과 픽업 프리팹에 할당.
|
||||
//
|
||||
// 효과:
|
||||
// - 장착 시 _idleAnimationState / _walkAnimationState를 이 무기 버전으로 교체
|
||||
// - Punch 입력 시 _punchRootNode 대신 AttackRootNode 사용
|
||||
// ============================================================================
|
||||
[CreateAssetMenu(fileName = "WeaponData", menuName = "Combat/WeaponData")]
|
||||
public class WeaponData : ScriptableObject
|
||||
{
|
||||
public string DisplayName; // UI 표시/디버그용 이름
|
||||
public WeaponType Type = WeaponType.Sword; // 분류 (시스템 분기용)
|
||||
|
||||
[Header("Equipped Animations")]
|
||||
public string IdleAnimationState; // 장착 시 idle 애니메이션 (예: "Idle_Sword")
|
||||
public string WalkAnimationState; // 장착 시 walk 애니메이션 (예: "Walk_Sword")
|
||||
|
||||
[Header("Attack")]
|
||||
public ComboNode AttackRootNode; // Punch 입력 시 사용할 콤보 root (단일 노드 가능)
|
||||
|
||||
[Header("Pickup Visual")]
|
||||
public Sprite PickupSprite; // 월드에 떨어뜨려진 모습
|
||||
}
|
||||
2
Assets/02_Scripts/Combat/WeaponData.cs.meta
Normal file
2
Assets/02_Scripts/Combat/WeaponData.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 45b80750b5f29714e8386d1330b97550
|
||||
58
Assets/02_Scripts/Combat/WeaponPickup.cs
Normal file
58
Assets/02_Scripts/Combat/WeaponPickup.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using UnityEngine;
|
||||
|
||||
// ============================================================================
|
||||
// WeaponPickup
|
||||
// ----------------------------------------------------------------------------
|
||||
// 월드에 떨어진 무기. 플레이어가 트리거 영역에 들어오면 자동으로 인벤토리에 추가되고 사라짐.
|
||||
//
|
||||
// 두 가지 사용 패턴:
|
||||
// 1) 씬에 미리 배치 → Inspector에서 _weapon 할당 → 자동 표시
|
||||
// 2) 코드로 동적 스폰 → Initialize(WeaponData)로 무기 주입 (Enemy.HandleDeath)
|
||||
// ============================================================================
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
[RequireComponent(typeof(SpriteRenderer))]
|
||||
public class WeaponPickup : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private WeaponData _weapon;
|
||||
|
||||
private SpriteRenderer _spriteRenderer;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_spriteRenderer = GetComponent<SpriteRenderer>();
|
||||
|
||||
// 픽업은 물리 충돌 아닌 트리거. 플레이어가 통과하면서 줍게.
|
||||
Collider2D col = GetComponent<Collider2D>();
|
||||
col.isTrigger = true;
|
||||
|
||||
ApplyVisual();
|
||||
}
|
||||
|
||||
// 코드로 동적 스폰 시 호출. Enemy.HandleDeath에서 사용.
|
||||
public void Initialize(WeaponData weapon)
|
||||
{
|
||||
_weapon = weapon;
|
||||
ApplyVisual();
|
||||
}
|
||||
|
||||
private void ApplyVisual()
|
||||
{
|
||||
if (_spriteRenderer == null || _weapon == null) return;
|
||||
if (_weapon.PickupSprite != null)
|
||||
_spriteRenderer.sprite = _weapon.PickupSprite;
|
||||
}
|
||||
|
||||
// 플레이어가 트리거 영역에 진입 시 발화.
|
||||
// Player(또는 자식)에 PlayerWeaponInventory 컴포넌트가 있어야 픽업 됨.
|
||||
// 이미 보유 중이면 Pickup이 false 반환 → pickup 오브젝트 그대로 유지.
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if (_weapon == null) return;
|
||||
|
||||
PlayerWeaponInventory inventory = other.GetComponentInParent<PlayerWeaponInventory>();
|
||||
if (inventory == null) return;
|
||||
|
||||
if (inventory.Pickup(_weapon))
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Combat/WeaponPickup.cs.meta
Normal file
2
Assets/02_Scripts/Combat/WeaponPickup.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2ccfada8b880c0045804198a4754cf2f
|
||||
@@ -42,6 +42,11 @@ public class Enemy : MonoBehaviour, IDamageable
|
||||
[SerializeField] private LayerMask _separationLayer; // 검사 대상 레이어 (보통 Enemy)
|
||||
private static readonly Collider2D[] _separationBuffer = new Collider2D[16]; // OverlapCircle 결과 버퍼 (GC 회피)
|
||||
|
||||
// ─── 사망 시 드랍 ───────────────────────────────────────────────────
|
||||
[Header("Drop")]
|
||||
[SerializeField] private WeaponData _dropWeapon; // null이면 드랍 안 함
|
||||
[SerializeField] private WeaponPickup _weaponPickupPrefab; // 픽업 오브젝트 프리팹 (한 종류 공유 가능)
|
||||
|
||||
private Health _health; // HP 컴포넌트 (별도 분리 → 플레이어도 같은 컴포넌트 재사용 가능)
|
||||
private Rigidbody2D _rb;
|
||||
private Animator _anim;
|
||||
@@ -448,10 +453,19 @@ private void BounceOffWall(Vector2 wallNormal)
|
||||
}
|
||||
|
||||
// Health.OnDied 이벤트 콜백. 사망 처리.
|
||||
// 현재는 단순 Destroy. 나중에 풀링/드롭/이펙트 추가하려면 여기에 확장.
|
||||
// _dropWeapon이 설정돼 있고 픽업 프리팹이 있으면 자기 위치에 무기 드랍.
|
||||
private void HandleDeath()
|
||||
{
|
||||
Debug.Log($"{name} 사망");
|
||||
DropWeaponIfAny();
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
private void DropWeaponIfAny()
|
||||
{
|
||||
if (_dropWeapon == null || _weaponPickupPrefab == null) return;
|
||||
|
||||
WeaponPickup pickup = Instantiate(_weaponPickupPrefab, transform.position, Quaternion.identity);
|
||||
pickup.Initialize(_dropWeapon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1372,13 +1372,26 @@ private void OnDrawGizmos()
|
||||
|
||||
float t = Mathf.Clamp01(since / _hitGizmoFadeDuration);
|
||||
float alpha = Mathf.Lerp(0.85f, 0f, t);
|
||||
float radius = _lastHitData.Radius;
|
||||
|
||||
Gizmos.color = new Color(1f, 0.2f, 0.2f, alpha * 0.35f);
|
||||
Gizmos.DrawSphere(_lastHitCenter, radius);
|
||||
Color fillColor = new Color(1f, 0.2f, 0.2f, alpha * 0.35f);
|
||||
Color wireColor = new Color(1f, 0f, 0f, alpha);
|
||||
|
||||
Gizmos.color = new Color(1f, 0f, 0f, alpha);
|
||||
Gizmos.DrawWireSphere(_lastHitCenter, radius);
|
||||
if (_lastHitData.Shape == HitShape.Box)
|
||||
{
|
||||
Vector3 size = new Vector3(_lastHitData.HitSize.x, _lastHitData.HitSize.y, 0.01f);
|
||||
Gizmos.color = fillColor;
|
||||
Gizmos.DrawCube(_lastHitCenter, size);
|
||||
Gizmos.color = wireColor;
|
||||
Gizmos.DrawWireCube(_lastHitCenter, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
float radius = _lastHitData.Radius;
|
||||
Gizmos.color = fillColor;
|
||||
Gizmos.DrawSphere(_lastHitCenter, radius);
|
||||
Gizmos.color = wireColor;
|
||||
Gizmos.DrawWireSphere(_lastHitCenter, radius);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Assets/05_Data/Attack/GunFire.asset
LFS
Normal file
BIN
Assets/05_Data/Attack/GunFire.asset
LFS
Normal file
Binary file not shown.
8
Assets/05_Data/Attack/GunFire.asset.meta
Normal file
8
Assets/05_Data/Attack/GunFire.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 97246ca8e6b518b44a551fac7f37ef34
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/05_Data/Attack/SwordAttack.asset
LFS
Normal file
BIN
Assets/05_Data/Attack/SwordAttack.asset
LFS
Normal file
Binary file not shown.
8
Assets/05_Data/Attack/SwordAttack.asset.meta
Normal file
8
Assets/05_Data/Attack/SwordAttack.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 398ec45e6de980d4abbf52c2232304f2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/05_Data/Attack/SwordStandingSlash.asset
LFS
Normal file
BIN
Assets/05_Data/Attack/SwordStandingSlash.asset
LFS
Normal file
Binary file not shown.
8
Assets/05_Data/Attack/SwordStandingSlash.asset.meta
Normal file
8
Assets/05_Data/Attack/SwordStandingSlash.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 45d5830bf6a792046b8d67506bd32186
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/05_Data/Combo/Combo_GunFire.asset
LFS
Normal file
BIN
Assets/05_Data/Combo/Combo_GunFire.asset
LFS
Normal file
Binary file not shown.
8
Assets/05_Data/Combo/Combo_GunFire.asset.meta
Normal file
8
Assets/05_Data/Combo/Combo_GunFire.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb35a5acd9f93624c96abc0489c9a707
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/05_Data/Combo/Combo_StandingSwordAttack.asset
LFS
Normal file
BIN
Assets/05_Data/Combo/Combo_StandingSwordAttack.asset
LFS
Normal file
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1a6a2d876e0f2d844ae8e34bec9c86c4
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/05_Data/Combo/Combo_SwordAttack.asset
LFS
Normal file
BIN
Assets/05_Data/Combo/Combo_SwordAttack.asset
LFS
Normal file
Binary file not shown.
8
Assets/05_Data/Combo/Combo_SwordAttack.asset.meta
Normal file
8
Assets/05_Data/Combo/Combo_SwordAttack.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 370b063234ad132409fb58d29fd6bb0f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/05_Data/Weapon.meta
Normal file
8
Assets/05_Data/Weapon.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 246c57b7e3084d84fb08e7d64d839cf9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/05_Data/Weapon/Gun.asset
LFS
Normal file
BIN
Assets/05_Data/Weapon/Gun.asset
LFS
Normal file
Binary file not shown.
8
Assets/05_Data/Weapon/Gun.asset.meta
Normal file
8
Assets/05_Data/Weapon/Gun.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a7e5b9e3d26bb8e43bc49c3c47e85608
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/05_Data/Weapon/Sword.asset
LFS
Normal file
BIN
Assets/05_Data/Weapon/Sword.asset
LFS
Normal file
Binary file not shown.
8
Assets/05_Data/Weapon/Sword.asset.meta
Normal file
8
Assets/05_Data/Weapon/Sword.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0d58fd53c1dbe5e4aaca29e175f95d6f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/06_Textures/Weapons.meta
Normal file
8
Assets/06_Textures/Weapons.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a8db13829d70ef843ad1f57018b89b0c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/06_Textures/Weapons/DotGun.png
LFS
Normal file
BIN
Assets/06_Textures/Weapons/DotGun.png
LFS
Normal file
Binary file not shown.
169
Assets/06_Textures/Weapons/DotGun.png.meta
Normal file
169
Assets/06_Textures/Weapons/DotGun.png.meta
Normal file
@@ -0,0 +1,169 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 602cc88075d49f545a5c1bcf95f65236
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -8930645337751689443
|
||||
second: DotGun_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: DotGun_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 6
|
||||
y: 2
|
||||
width: 19
|
||||
height: 24
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: d17ef44c169ff0480800000000000000
|
||||
internalID: -8930645337751689443
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
DotGun_0: -8930645337751689443
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/06_Textures/Weapons/DotSword.png
LFS
Normal file
BIN
Assets/06_Textures/Weapons/DotSword.png
LFS
Normal file
Binary file not shown.
169
Assets/06_Textures/Weapons/DotSword.png.meta
Normal file
169
Assets/06_Textures/Weapons/DotSword.png.meta
Normal file
@@ -0,0 +1,169 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 74358c124c4edfd499a00a236c9c3627
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -1919357906424841633
|
||||
second: DotSword_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: DotSword_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1
|
||||
y: 0
|
||||
width: 30
|
||||
height: 30
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: f5ab5be37221d55e0800000000000000
|
||||
internalID: -1919357906424841633
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
DotSword_0: -1919357906424841633
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user