
오늘은 점프대와 아이템을 사용하면 그만큼 수치가 올라가는것을 만들어 볼것이다.
점프대 Rigidbody ForceMode (난이도 : ★★★☆☆)
Coroutine (난이도 : ★★★☆☆)기존 오브젝트와 똑같이 만들어준다.


이렇게 만든후에 JumpObject라는 스크립트를 작성한다
public class JumpObject : MonoBehaviour // JumpObject 클래스는 MonoBehaviour를 상속받아 Unity의 컴포넌트로 동작합니다.
{
public float JumpForce = 100f; // JumpForce 변수는 점프의 힘을 정의합니다. 기본값은 100f입니다.
private void OnCollisionEnter(Collision collision) // OnCollisionEnter 메서드는 다른 물체와 충돌할 때 호출됩니다.
{
Rigidbody rb = collision.collider.GetComponent<Rigidbody>(); // 충돌한 물체의 Rigidbody 컴포넌트를 가져옵니다.
if (rb != null) // Rigidbody 컴포넌트가 존재하는지 확인합니다.
{
rb.AddForce(Vector3.up * JumpForce, ForceMode.Impulse); // Rigidbody에 위 방향으로 JumpForce만큼의 순간적인 힘을 가합니다.
}
}
}
특정 아이템을 사용하게되면 이동속도가 빨라지는 아이템을 만들어 볼것이다.
using UnityEngine;
[CreateAssetMenu(fileName = "NewItem", menuName = "Item/ItemData")]
public class ItemData : ScriptableObject
{
public string itemName;
public string description;
public Sprite icon;
public int value;
public ItemType itemType;
public float effectDuration;
public EffectType effectType;
public enum ItemType
{
Weapon,
Armor,
Consumable,
Misc
}
public enum EffectType
{
SpeedBoost,
// 다른 효과 유형 추가 가능
}
}
여기서 이펙트타입 SpeedBoost를 추가하고 변수 effectDuration를 추가해 지속시간을 입력받는변수를 만든다.
// 아이템 효과 적용 메서드 추가
public void ApplyEffect(ItemData item)
{
if (item.effectType == ItemData.EffectType.SpeedBoost)
{
if (activeEffectCoroutine != null)
{
StopCoroutine(activeEffectCoroutine);
}
activeEffectCoroutine = StartCoroutine(SpeedBoost(item.effectDuration));
}
}
private IEnumerator SpeedBoost(float duration)
{
MoveSpeed = originalMoveSpeed * 2; // 속도를 두 배로 증가
yield return new WaitForSeconds(duration); // 지속 시간 동안 대기
MoveSpeed = originalMoveSpeed; // 속도를 원래대로 복원
activeEffectCoroutine = null;
}
기존 플레이어 컨트롤러에 이 효과를 넣었다.
ItemData의 이펙트 타입이 스피드 부스트라면 이 SpeedBoost코루틴을 돌게된다.
이제 이것들을 각 아이템 데이터에 적용을 하게 되면.

