+ 물고기를 잡으면 드랍 가능한 형태의 오브젝트와 아이콘이 생성되게 변경되었습니다. + 플레이어(배)와 아이콘의 위치가 가까워지면 플레이어는 아이콘을 흡수하면서 아이템을 얻게됩니다. + 아이템 획득 시에 효과음을 추가하였습니다. + 아이템 획득 시에 좌측 중단에 UI를 통해서 어떠한 아이템을 얻었는지 확인할 수 있게 표시합니다. + 물고기 스팟 이펙트를 2가지 합치는 방식으로 변경하였습니다. + 물고기 스팟을 기준으로 플레이어와의 거리를 체크해 물고기 스팟이 도망치는 방식으로 변경되었습니다. (기존에는 Bound의 중심) + 물고기 스팟의 크기를 원하는 크기로 변경할 수 있도록 변경했습니다. + 인터페이스 IItem을 추가하였습니다. + Item,FishItem 로직을 변경했습니다.
72 lines
2.7 KiB
C#
72 lines
2.7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using Random = UnityEngine.Random;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace BlueWaterProject
|
|
{
|
|
[Serializable]
|
|
public class ProcessBar
|
|
{
|
|
[field: SerializeField] public GameObject Obj { get; set; }
|
|
[field: SerializeField] public Image Fill { get; set; }
|
|
[field: SerializeField] public Transform PreviousGaugeLine { get; set; }
|
|
[field: SerializeField] public Slider ReloadSlider { get; set; }
|
|
[field: SerializeField] public float ShakeDuration { get; set; } = 0.5f;
|
|
[field: SerializeField] public float ShakePower { get; set; } = 10f;
|
|
|
|
private AudioSource reloadingAttackSound;
|
|
private bool isShaking;
|
|
|
|
public ProcessBar(GameObject obj, Image fill, Transform previousGaugeLine, Slider reloadSlider)
|
|
{
|
|
Obj = obj;
|
|
Fill = fill;
|
|
PreviousGaugeLine = previousGaugeLine;
|
|
ReloadSlider = reloadSlider;
|
|
|
|
reloadingAttackSound = ReloadSlider.GetComponent<AudioSource>();
|
|
|
|
SetFillAmount(0f);
|
|
}
|
|
|
|
public void SetActive(bool value) => Obj.SetActive(value);
|
|
public void SetPosition(Vector3 value) => Obj.transform.position = value;
|
|
public void SetFillAmount(float value) => Fill.fillAmount = value;
|
|
public void SetRotateZ(float value) => PreviousGaugeLine.rotation = Quaternion.Euler(0f, 0f, value);
|
|
public void SetActiveReloadSlider(bool value) => ReloadSlider.gameObject.SetActive(value);
|
|
public void SetSliderValue(float value) => ReloadSlider.value = value;
|
|
|
|
public IEnumerator ShakeProcessBarCoroutine()
|
|
{
|
|
if (isShaking) yield break;
|
|
|
|
isShaking = true;
|
|
reloadingAttackSound.Play();
|
|
var time = 0f;
|
|
var processBarOriginalPos = Obj.transform.localPosition;
|
|
|
|
while (time < ShakeDuration)
|
|
{
|
|
if (!Obj.gameObject.activeSelf)
|
|
{
|
|
Obj.transform.localPosition = processBarOriginalPos;
|
|
isShaking = false;
|
|
yield break;
|
|
}
|
|
|
|
time += Time.deltaTime;
|
|
var shakeAmount = Random.Range(-1f, 1f) * ShakePower;
|
|
var processBarLocalPos = Obj.transform.localPosition;
|
|
Obj.transform.localPosition = new Vector3(processBarLocalPos.x + shakeAmount, processBarLocalPos.y,
|
|
processBarLocalPos.z);
|
|
yield return null;
|
|
}
|
|
|
|
Obj.transform.localPosition = processBarOriginalPos;
|
|
isShaking = false;
|
|
}
|
|
}
|
|
} |