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:
2026-05-19 18:05:05 +09:00
parent de726705da
commit 4a0b07701e
35 changed files with 719 additions and 22 deletions

View File

@@ -1,6 +1,13 @@
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization; using UnityEngine.Serialization;
// 공격 판정 영역의 도형. Circle은 원거리 균등 판정, Box는 길쭉한 직선/넓은 부채꼴에 적합.
public enum HitShape
{
Circle,
Box
}
// ============================================================================ // ============================================================================
// ActionData // ActionData
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -44,8 +51,10 @@ public class ActionData : ScriptableObject
// ─── 공격 판정 (HasHit=true일 때 적용) ───────────────────────────── // ─── 공격 판정 (HasHit=true일 때 적용) ─────────────────────────────
[Header("Hit")] [Header("Hit")]
public bool HasHit = true; // 이 액션이 데미지를 주는지 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 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 int Damage = 10; // 데미지 양
public float HitTiming = 0.15f; // 액션 시작 후 hit 발동까지 시간 (선딜) public float HitTiming = 0.15f; // 액션 시작 후 hit 발동까지 시간 (선딜)
public float HitDuration = 0f; // hit 영역이 활성 상태로 유지되는 시간 (0이면 단발) public float HitDuration = 0f; // hit 영역이 활성 상태로 유지되는 시간 (0이면 단발)

View File

@@ -20,7 +20,11 @@ public class AttackHitbox : MonoBehaviour
// PlayerController가 구독해서 "방금 hit한 적" 추적용 (잡기 타겟 우선 등에 활용). // PlayerController가 구독해서 "방금 hit한 적" 추적용 (잡기 타겟 우선 등에 활용).
public event System.Action<IDamageable> OnHit; 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에서 세팅) ───────── // ─── 현재 활성 액션의 데미지/효과 데이터 (Activate에서 세팅) ─────────
private int _damage; private int _damage;
@@ -39,18 +43,43 @@ public class AttackHitbox : MonoBehaviour
private void Awake() private void Awake()
{ {
_collider = GetComponent<CircleCollider2D>(); _circleCollider = GetComponent<CircleCollider2D>();
// 플레이어 몸체는 적과 물리 충돌하지 않으므로, 공격 판정은 트리거만 사용한다. // 플레이어 몸체는 적과 물리 충돌하지 않으므로, 공격 판정은 트리거만 사용.
_collider.isTrigger = true; _circleCollider.isTrigger = true;
_collider.enabled = false; _circleCollider.enabled = false;
// BoxCollider2D는 없으면 자동 추가. 기존 프리팹과의 호환성 유지.
_boxCollider = GetComponent<BoxCollider2D>();
if (_boxCollider == null)
_boxCollider = gameObject.AddComponent<BoxCollider2D>();
_boxCollider.isTrigger = true;
_boxCollider.enabled = false;
} }
// 액션 시작 시 호출. 위치/반경/데미지 등 모든 파라미터 세팅 후 콜라이더 활성화. // 액션 시작 시 호출. 도형/위치/데미지 세팅 후 해당 콜라이더 활성화.
// _alreadyHit를 클리어해서 새 공격으로 다시 hit 가능하게 함. // _alreadyHit를 클리어해서 새 공격으로 다시 hit 가능하게 함.
public void Activate(ActionData data, Vector2 localPosition, Vector2 hitVelocity, Vector2 sourcePosition, Vector2? hitTargetPosition, bool correctHitTargetY, int hitPositionSolidMask, LayerMask targetLayer) public void Activate(ActionData data, Vector2 localPosition, Vector2 hitVelocity, Vector2 sourcePosition, Vector2? hitTargetPosition, bool correctHitTargetY, int hitPositionSolidMask, LayerMask targetLayer)
{ {
transform.localPosition = localPosition; 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; _damage = data.Damage;
_hitVelocity = hitVelocity; _hitVelocity = hitVelocity;
_hitSourcePosition = sourcePosition; _hitSourcePosition = sourcePosition;
@@ -62,24 +91,27 @@ public void Activate(ActionData data, Vector2 localPosition, Vector2 hitVelocity
_hitReactionState = data.HitReactionAnimationState; _hitReactionState = data.HitReactionAnimationState;
_targetLayer = targetLayer; _targetLayer = targetLayer;
_alreadyHit.Clear(); _alreadyHit.Clear();
_collider.enabled = true;
// 판정이 켜진 순간 이미 범위 안에 있던 적도 같은 프레임에 잡아낸다. // 판정이 켜진 순간 이미 범위 안에 있던 적도 같은 프레임에 잡아낸다.
ScanImmediateOverlap(); ScanImmediateOverlap();
} }
// 액션의 HitDuration이 끝나면 호출. 콜라이더 비활성화 + hit 기록 초기화. // 액션의 HitDuration이 끝나면 호출. 모든 콜라이더 비활성화 + hit 기록 초기화.
public void Deactivate() public void Deactivate()
{ {
_collider.enabled = false; _circleCollider.enabled = false;
_boxCollider.enabled = false;
_alreadyHit.Clear(); _alreadyHit.Clear();
} }
// 활성 순간 즉시 검사: Physics2D.OverlapCircleAll로 현재 겹친 콜라이더를 모두 가져와 TryDamage. // 활성 순간 즉시 검사: 도형에 맞는 OverlapAll로 현재 겹친 콜라이더를 모두 가져와 TryDamage.
// 이게 없으면 짧은 hit window (예: HitDuration=0.02)에 OnTriggerEnter가 못 따라옴. // 이게 없으면 짧은 hit window (예: HitDuration=0.02)에 OnTriggerEnter가 못 따라옴.
private void ScanImmediateOverlap() 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) foreach (var hit in hits)
TryDamage(hit); TryDamage(hit);
} }

View 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;
}
}

View File

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

View 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; // 월드에 떨어뜨려진 모습
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 45b80750b5f29714e8386d1330b97550

View 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);
}
}

View File

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

View File

@@ -42,6 +42,11 @@ public class Enemy : MonoBehaviour, IDamageable
[SerializeField] private LayerMask _separationLayer; // 검사 대상 레이어 (보통 Enemy) [SerializeField] private LayerMask _separationLayer; // 검사 대상 레이어 (보통 Enemy)
private static readonly Collider2D[] _separationBuffer = new Collider2D[16]; // OverlapCircle 결과 버퍼 (GC 회피) 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 Health _health; // HP 컴포넌트 (별도 분리 → 플레이어도 같은 컴포넌트 재사용 가능)
private Rigidbody2D _rb; private Rigidbody2D _rb;
private Animator _anim; private Animator _anim;
@@ -448,10 +453,19 @@ private void BounceOffWall(Vector2 wallNormal)
} }
// Health.OnDied 이벤트 콜백. 사망 처리. // Health.OnDied 이벤트 콜백. 사망 처리.
// 현재는 단순 Destroy. 나중에 풀링/드롭/이펙트 추가하려면 여기에 확장. // _dropWeapon이 설정돼 있고 픽업 프리팹이 있으면 자기 위치에 무기 드랍.
private void HandleDeath() private void HandleDeath()
{ {
Debug.Log($"{name} 사망"); Debug.Log($"{name} 사망");
DropWeaponIfAny();
Destroy(gameObject); Destroy(gameObject);
} }
private void DropWeaponIfAny()
{
if (_dropWeapon == null || _weaponPickupPrefab == null) return;
WeaponPickup pickup = Instantiate(_weaponPickupPrefab, transform.position, Quaternion.identity);
pickup.Initialize(_dropWeapon);
}
} }

View File

@@ -1372,14 +1372,27 @@ private void OnDrawGizmos()
float t = Mathf.Clamp01(since / _hitGizmoFadeDuration); float t = Mathf.Clamp01(since / _hitGizmoFadeDuration);
float alpha = Mathf.Lerp(0.85f, 0f, t); float alpha = Mathf.Lerp(0.85f, 0f, t);
Color fillColor = new Color(1f, 0.2f, 0.2f, alpha * 0.35f);
Color wireColor = new Color(1f, 0f, 0f, alpha);
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; float radius = _lastHitData.Radius;
Gizmos.color = fillColor;
Gizmos.color = new Color(1f, 0.2f, 0.2f, alpha * 0.35f);
Gizmos.DrawSphere(_lastHitCenter, radius); Gizmos.DrawSphere(_lastHitCenter, radius);
Gizmos.color = wireColor;
Gizmos.color = new Color(1f, 0f, 0f, alpha);
Gizmos.DrawWireSphere(_lastHitCenter, radius); Gizmos.DrawWireSphere(_lastHitCenter, radius);
} }
}
private void OnDrawGizmosSelected() private void OnDrawGizmosSelected()
{ {

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

View 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

Binary file not shown.

View 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

Binary file not shown.

View File

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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a8db13829d70ef843ad1f57018b89b0c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View 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:

Binary file not shown.

View 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: