#17 낙석에 Indicator 기능 추가

This commit is contained in:
Nam Tae Gun 2024-06-14 18:34:58 +09:00
parent 4db6c2bf57
commit 54bc27f11d
3 changed files with 125 additions and 3 deletions

View File

@ -4,6 +4,8 @@ using BlueWater.Interfaces;
using BlueWater.Maps; using BlueWater.Maps;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.Universal;
using UnityEngine.Serialization;
namespace BlueWater namespace BlueWater
{ {
@ -16,6 +18,13 @@ namespace BlueWater
[SerializeField, Required] [SerializeField, Required]
private SphereCollider _sphereCollider; private SphereCollider _sphereCollider;
[SerializeField]
private DecalProjector _indicator;
[Title("표시기 설정")]
[SerializeField]
private bool _isUsingIndicator = true;
[Title("충돌 설정")] [Title("충돌 설정")]
[SerializeField] [SerializeField]
private LayerMask _targetLayer; private LayerMask _targetLayer;
@ -39,16 +48,38 @@ namespace BlueWater
private Collider[] _hitColliders = new Collider[4]; private Collider[] _hitColliders = new Collider[4];
private bool _isGrounded; private bool _isGrounded;
private bool _isAttacked; private bool _isAttacked;
// Hashes
private static readonly int _fillHash = Shader.PropertyToID("_Fill");
private IEnumerator Start() private IEnumerator Start()
{ {
_sphereCollider.enabled = false; _sphereCollider.enabled = false;
SpawnLocation = MapManager.Instance.SandMoleMapController.ParticleInstantiateLocation; SpawnLocation = MapManager.Instance.SandMoleMapController.ParticleInstantiateLocation;
BasicSetting();
ShowIndicator();
var startDistance = float.PositiveInfinity;
while (!_isGrounded) while (!_isGrounded)
{ {
_isGrounded = Physics.Raycast(transform.position, Vector3.down, _checkDistance, _groundLayer); if (!Physics.Raycast(transform.position, Vector3.down, out var hit, 10f, _groundLayer)) continue;
if (float.IsPositiveInfinity(startDistance))
{
startDistance = hit.distance;
}
if (_isUsingIndicator && _indicator)
{
var fillValue = Mathf.Lerp(1f, 0f, hit.distance / startDistance);
_indicator.material.SetFloat(_fillHash, fillValue);
}
_isGrounded = hit.distance <= _checkDistance;
yield return null; yield return null;
} }
_indicator.material.SetFloat(_fillHash, 1f);
HideIndicator();
if (_rigidbody) if (_rigidbody)
{ {
@ -77,5 +108,30 @@ namespace BlueWater
iDamageable.TakeDamage(_attackDamage); iDamageable.TakeDamage(_attackDamage);
} }
} }
private void BasicSetting()
{
if (!_isUsingIndicator || !_indicator) return;
_indicator.scaleMode = DecalScaleMode.InheritFromHierarchy;
_indicator.material = new Material(_indicator.material);
_indicator.material.SetFloat(_fillHash, 0f);
}
private void HideIndicator()
{
if (!_isUsingIndicator || !_indicator) return;
_indicator.enabled = false;
_indicator.material.SetFloat(_fillHash, 0);
}
private void ShowIndicator()
{
if (!_isUsingIndicator || !_indicator) return;
_indicator.material.SetFloat(_fillHash, 0);
_indicator.enabled = true;
}
} }
} }

View File

@ -137,7 +137,7 @@ SpriteRenderer:
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: d3c87e7ec1e83654cb2bff3178900c99, type: 2} - {fileID: 2100000, guid: cc9b0fce917bc9548bd1bf66aa23a269, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0

View File

@ -1,5 +1,61 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &8995215974275723360
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1426941151981288099}
- component: {fileID: 6370181286260610806}
m_Layer: 8
m_Name: Indicator
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1426941151981288099
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8995215974275723360}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 5, z: 0}
m_LocalScale: {x: 1, y: 1, z: 10}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6877682250950493550}
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!114 &6370181286260610806
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8995215974275723360}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0777d029ed3dffa4692f417d4aba19ca, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 2100000, guid: 0b52d77e4d2f39e4096329a5a410c6a3, type: 2}
m_DrawDistance: 1000
m_FadeScale: 0.9
m_StartAngleFade: 180
m_EndAngleFade: 180
m_UVScale: {x: 1, y: 1}
m_UVBias: {x: 0, y: 0}
m_DecalLayerMask: 1
m_ScaleMode: 1
m_Offset: {x: 0, y: 0, z: 0.5}
m_Size: {x: 1, y: 1, z: 1}
m_FadeFactor: 1
--- !u!1001 &3577643095578124186 --- !u!1001 &3577643095578124186
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -78,7 +134,10 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 7986070582027999988, guid: bfc5c806b2fa3ba40850df302d3db0b7, type: 3}
insertIndex: -1
addedObject: {fileID: 1426941151981288099}
m_AddedComponents: m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 3764902268943045601, guid: bfc5c806b2fa3ba40850df302d3db0b7, type: 3} - targetCorrespondingSourceObject: {fileID: 3764902268943045601, guid: bfc5c806b2fa3ba40850df302d3db0b7, type: 3}
insertIndex: -1 insertIndex: -1
@ -107,6 +166,8 @@ MonoBehaviour:
_dieParticle: {fileID: 19826678, guid: 660dfd0ccf26cbf489a7556236949683, type: 3} _dieParticle: {fileID: 19826678, guid: 660dfd0ccf26cbf489a7556236949683, type: 3}
_rigidbody: {fileID: 1838738275417183443} _rigidbody: {fileID: 1838738275417183443}
_sphereCollider: {fileID: 2971964863692897937} _sphereCollider: {fileID: 2971964863692897937}
_indicator: {fileID: 6370181286260610806}
_isUsingIndicator: 1
_targetLayer: _targetLayer:
serializedVersion: 2 serializedVersion: 2
m_Bits: 2048 m_Bits: 2048
@ -127,3 +188,8 @@ SphereCollider:
m_CorrespondingSourceObject: {fileID: 1772409705626034443, guid: bfc5c806b2fa3ba40850df302d3db0b7, type: 3} m_CorrespondingSourceObject: {fileID: 1772409705626034443, guid: bfc5c806b2fa3ba40850df302d3db0b7, type: 3}
m_PrefabInstance: {fileID: 3577643095578124186} m_PrefabInstance: {fileID: 3577643095578124186}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!4 &6877682250950493550 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7986070582027999988, guid: bfc5c806b2fa3ba40850df302d3db0b7, type: 3}
m_PrefabInstance: {fileID: 3577643095578124186}
m_PrefabAsset: {fileID: 0}