ํธ๋ฆฌ๊ฑฐ ๊ด๋ จํด์ ํ๋๋ก ๊ด๋ฆฌํ๋ ค๊ณ ๋ง๋ค๊ณ ์๋์ค์ธ๋ฐ
ํธ๋ฆฌ๊ฑฐ ํ์ฑ ๋นํ์ฑ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ์คํฌ๋ฝํฐ๋ธ์ค๋ธ์ ํธ๋ก ๋ง๋ค์์ด
๊ฑฐ๊ธฐ์ ์ด์ ํ์ฑ ๋นํ์ฑํ๋ ค๋ ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ๋๋ฐ ์ด๊ฒ ํ ๋น์ด ์๋๋ค ๋ฌด์จ์ด์ ์ผ๊น
ํด๋น๋ถ๋ถ ์คํฌ๋ฆฝํธ
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName = "ํธ๋ฆฌ๊ฑฐ ์ก์ /์ค๋ธ์ ํธ ํ์ฑํ")]
public class ActivateObjectsAction : ITriggerAction
{
[Header("ํ์ฑํํ ์ค๋ธ์ ํธ๋ค")]
[SerializeField]
private List<GameObject> objectsToActivate = new List<GameObject>(); --- ์ด ๋ถ๋ถ์ด ์ธ์คํํธ์์ ํ ๋น์ด ์๋จ
// ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ์ํ ๋ ํ์ฑํํ ์ค๋ธ์ ํธ ๋ฆฌ์คํธ
/// <summary>
/// ํธ๋ฆฌ๊ฑฐ ์ง์ ์ ์คํ๋๋ ๋ฉ์๋.
/// ์ง์ ๋ ์ค๋ธ์ ํธ๋ค์ ํ์ฑํํฉ๋๋ค.
/// </summary>
public override void ExecuteEnterAction()
{
SetActiveState(true);
}
/// <summary>
/// ํธ๋ฆฌ๊ฑฐ ์ข ๋ฃ ์ ์คํ๋๋ ๋ฉ์๋.
/// ์ง์ ๋ ์ค๋ธ์ ํธ๋ค์ ๋นํ์ฑํํฉ๋๋ค.
/// </summary>
public override void ExecuteExitAction()
{
SetActiveState(false);
}
/// <summary>
/// ์ง์ ๋ ์ค๋ธ์ ํธ๋ค์ ํ์ฑํ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.
/// </summary>
/// <param name="state">ํ์ฑํํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ ๊ฐ</param>
private void SetActiveState(bool state)
{
// objectsToActivate ๋ฆฌ์คํธ๊ฐ ๋น์ด ์๊ฑฐ๋ null์ธ ๊ฒฝ์ฐ ๋ฐํ
if (objectsToActivate == null || objectsToActivate.Count == 0) return;
// ๋ฆฌ์คํธ ๋ด์ ๊ฐ ์ค๋ธ์ ํธ์ ํ์ฑํ ์ํ๋ฅผ ์ค์
foreach (var obj in objectsToActivate)
{
if (obj != null)
{
obj.SetActive(state);
}
}
}
}
///// ํธ๋ฆฌ๊ฑฐ๋งค๋์ ์คํฌ๋ฆฝํธ -- ๊ฐ์ข ์ก์ ๊ด๋ จ ํ๋ฐฉ์ ๋ชจ๋์์ผ ๊ด๋ฆฌํ๋ ค๋ ๋ชฉ์ ๋๊ณ ๋๊ณ ์จ๋จน์ผ๋ ค๊ณ
public abstract class ITriggerAction : ScriptableObject
{
ย ย public abstract void ExecuteEnterAction();
ย ย public abstract void ExecuteExitAction();
}
ํ๋ฆฌํน์ด ์๋ ์ฌ์ ์๋ ์ค๋ธ์ ํธ๋ ์ฌ ์ข ์์ฑ ๋๋ฌธ์ SO๋ ํ๋ฆฌํน์ ๋๋๊ทธ๋ก ์ฐธ์กฐ์ํฌ ์ ์์ด
๊ทํ ๋ต๋ณ ๊ณ ๋ง์. ๊ทธ๋ผ ํ๋ฆฌํน ๋ง๋ค์ด๋๊ณ ์์น๊ฐ๋ง ๋น์ค๋ธ์ ํธํด์ ์คํฐ์ง์ ๋ฐฐ์นํ๊ณ ์ฐ๋์ ๋ฐ์ ์๊ฒ ๋ค?
ใ ์คํฐ์ง์ ์ empty๋ก ๋๊ณ ์์์ ์ํํด์ ์ฐ๊ฑฐ๋ ์ต์ ํธ๋ฅผ ํ๋ฆฌํน์ผ๋ก ๋ง๋ค์ด์ผํจ๋ฏธ๋ค