Unityã䜿ã£ãŠã²ãŒã ãäœããšããåããããªåŠçãæã€ãã©ãã¡ãã£ãšãã€éããªããžã§ã¯ãã ãåºãŠããŸãã
äŸãã°ããã¬ã€ã€ãŒããEãããŒãæŒããŠãã¢ãéããããã¹ã€ãããæŒããããã¢ã€ãã ãæŸã£ããããå Žåã
ãEãããŒã§äœããå®è¡ãããšããå ±éç¹ã¯ãããã©ããªããžã§ã¯ãããšã«åŠçãéããã§ãããã
ãããªãšãã«åœ¹ç«ã€ã®ãä»å玹ä»ãããã€ã³ã¿ãŒãã§ãŒã¹ãã§ãã
ããã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãšã¯äœãïŒã©ã䜿ããšäŸ¿å©ãªã®ãïŒãåå¿è åãã«è§£èª¬ããããšæããŸãã
Unityã§ã€ã³ã¿ãŒãã§ãŒã¹ã䜿ãã¡ãªãããåå¿è åãã«è§£èª¬ïŒ
ã€ã³ã¿ãŒãã§ãŒã¹ãšã¯ïŒ
ã€ã³ã¿ãŒãã§ãŒã¹ãšã¯ãããã®æ©èœãæã£ãŠãããïŒããšããçŽæãæ±ºãããã®ã§ãã
äŸãã°ãã²ãŒã å ã§ ãEããŒã§äœãã§ãããªããžã§ã¯ãããäœãããå ŽåããããªããšãèããŸãããïŒ
- ãã¢ãªã â éã
- ã¹ã€ãããªã â ON/OFFãåãæ¿ãã
- ã¢ã€ãã ãªã â æŸã
ãã¹ãŠéãåãããããã©ãå ±éããã®ã¯ãEããŒã§åããããšã§ãã
ã€ã³ã¿ãŒãã§ãŒã¹ã䜿ããšããEããŒã§äœãããããšããã«ãŒã«ãäžæ¬ç®¡çã§ããããã«ãªããŸãã
ã€ã³ã¿ãŒãã§ãŒã¹ã®äœãæ¹
ããã§ã¯ãå®éã«ã€ã³ã¿ãŒãã§ãŒã¹ãäœã£ãŠã¿ãããšæããŸãã
ç§ããéšå±ã®äžããã¬ã€ã€ãŒãåŸåŸããŠãã¡ãã¡ã«ååšãããã¢ããEãããŒãæŒãããšã§ãåã ã«èšå®ãããŠããã¢ãã¡ãŒã·ã§ã³ãåçããŠãã¢ãéããããã«ããããšæããŸãã
Interactableã€ã³ã¿ãŒãã§ãŒã¹ãäœã
public interface Interactable
{
void Interact(); // EããŒãæŒãããå®è¡ããã颿°
}
ãŸãããEããŒã§åäœãããªããžã§ã¯ã㯠Interact() ãšãã颿°ãæã€ããšããã«ãŒã«ãäœããŸãããããã€ã³ã¿ãŒãã§ãŒã¹ã§å®çŸ©ããŸãããã
interfaceã䜿ããšãã¯ã©ã¹ã« ããã®é¢æ°ãå¿ ãäœããªãããã¡ïŒã ãšããã«ãŒã«ãèšå®ã§ããŸãã
ç¶ããŠãããããã®ãªããžã§ã¯ãã«èšå®ããInteractableObjectã¹ã¯ãªãããäœæããŸãã
using UnityEngine;
public class InteractableObject : MonoBehaviour, Interactable
{
private Animator animator;
public string animationTriggerName; // åãªããžã§ã¯ãã®ã¢ãã¡ãŒã·ã§ã³ããªã¬ãŒå
void Start()
{
animator = GetComponent(); // Animator ãååŸ
}
public void Interact()
{
if (animator != null && !string.IsNullOrEmpty(animationTriggerName))
{
animator.SetTrigger(animationTriggerName); // æå®ããã¢ãã¡ãŒã·ã§ã³ãåç
}
else
{
Debug.LogWarning("ã¢ãã¡ãŒã·ã§ã³ããããŸãã");
}
}
}
ãã¡ãã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ãããŠããåŽã«ãªããŸãã®ã§ãInteractableãç¶æ¿ããŠãããå¿ èŠããããŸãã
éšå±ã®ãã¡ãã¡ã«ãã¢ãé 眮ãããŠããããã¬ã€ã€ãŒãäžå®è·é¢ãŸã§è¿ã¥ããæã«EããŒãæŒãããšã§æå®ããã¢ãã¡ãŒã·ã§ã³ãåçããããã«ããŸãã
æ¢ã«åãã¢ã«ã¯åå¥ã§PositionãRotationãããã£ãã¢ãã¡ãŒã·ã§ã³ãèšå®ããŠããŸãã
ãã®ã¹ã¯ãªãããåãããããªããžã§ã¯ãã«ã¢ã¿ããããŠãanimationTriggerNameãèªç±ã«èšå®ããŠãããã°è¯ãã§ããã
ãã¢ã®å Žåã¯ãåãã¢æ¯ã«ãDoor1ããDoor2ããDoor3ããšãã£ãããã«ParametersããTriggerãäœã£ãŠãããã°OKã§ãã
æåŸã«ãã€ã³ã¿ãŒãã§ãŒã¹ãåŒã¶åŽãšãªããPlayerInteractionãã¹ã¯ãªãããäœããŸãã
using UnityEngine;
public class PlayerInteraction : MonoBehaviour
{
public float interactRange = 2.0f; // ã€ã³ã¿ã©ã¯ãå¯èœãªç¯å²
void Update()
{
if (Input.GetKeyDown(KeyCode.E))
{
TryInteract();
}
}
void TryInteract()
{
Collider[] hitColliders = Physics.OverlapSphere(transform.position, interactRange);
foreach (var collider in hitColliders)
{
Interactable interactable = collider.GetComponent();
if (interactable != null)
{
interactable.Interact(); // è¿ãã®ãªããžã§ã¯ãã®Interact()ãå®è¡
return;
}
}
Debug.Log("è¿ãã«ã€ã³ã¿ã©ã¯ã·ã§ã³å¯èœãªãªããžã§ã¯ãããããŸãã");
}
}
ç§ã®å Žåã¯ãFPSControllerãã¢ã¿ããããŠãããã¬ã€ã€ãŒãããã®ã§ãããã«ãã®ã¹ã¯ãªãããã¢ã¿ããããŸãã
ãã£ãŠãããšã¯ãEããŒãæŒããéã«æå®ããç¯å²å ã«ãŠåãããããªããžã§ã¯ããããããã§ãã¯ããŠããªããžã§ã¯ããååšããããã®ãªããžã§ã¯ãã®Interact()ãå®è¡ããŠããŸãã
ãã®ããã«ããããšã§ãè€æ°ã®ãªããžã§ã¯ããäžæ¬ç®¡çã§ããã®ã§ãã¹ã¯ãªãããå¢ããå¿ èŠããªããªããŸããã
ã€ã³ã¿ãŒãã§ãŒã¹ã䜿ãã¡ãªãã
â å ±éã®ä»çµã¿ã§è€æ°ã®ãªããžã§ã¯ãã管çã§ãã
ã€ã³ã¿ãŒãã§ãŒã¹ã䜿ããªãå Žåãããã¢çšã®ã¹ã¯ãªããããã¹ã€ããçšã®ã¹ã¯ãªãããâŠãšåããŠç®¡çããå¿ èŠããããŸãããã€ã³ã¿ãŒãã§ãŒã¹ã䜿ãã°ãInteract()ããåŒã³åºãã°OKã§ãã
â¡ æ°ãããªããžã§ã¯ãã远å ããŠããæ¢åã®ã³ãŒãã倿ŽããªããŠæžã
æ°ããã¢ã€ãã çã®ãªããžã§ã¯ãã远å ããŠããInteractableãå®è£ ããã°ããã«å¯Ÿå¿å¯èœã§ãã
⢠ã¹ã¯ãªããã®éãæžãããŠã管çãããããªã
ã€ã³ã¿ãŒãã§ãŒã¹ã䜿ãããšã§ãDoorManagerãSwitchManagerãItemManagerçãšãã£ãããã«ãã©ãã©ã®ã¹ã¯ãªãããå¿ èŠã«ãªãããšããããŸããã
ä»åã®å Žåã¯ãInteractableã«ãŠçµ±äžããããšãåºæ¥ãŸãã
ã€ã³ã¿ãŒãã§ãŒã¹ã䜿ãäžã§ã®æ³šæç¹ & ãã¡ãªãã
ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãšãŠã䟿å©ã§ãããäžèœã§ã¯ãããŸããã
äœ¿ãæ¹ãééãããšéã«ã³ãŒããè€éã«ãªã£ãããã¡ã³ããã³ã¹ãé£ãããªã£ããããããšããããŸãã
â å®è£ ã®ã³ãŒããå¢ãã
äŸãã°ãInteractableã䜿ã£ãŠãããªããžã§ã¯ãïŒãã¢ã»æ€ åçç°ãªããªããžã§ã¯ãïŒã10åãããšãããããã«Interact()ãæžãå¿ èŠããããŸãã
解決çãšããŠã¯ãæœè±¡ã¯ã©ã¹ã䜿ãäºã§åŠçãå ±éåããŠãŸãšããããšãåºæ¥ãããšæããŸãã
â¡ Unityã®ã€ã³ã¹ãã¯ã¿ãŒã§ã¯InteractableãçŽæ¥èšå®ã§ããªã
Unityã®ã€ã³ã¹ãã¯ã¿ãŒã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãæã€ãªããžã§ã¯ãã
public Interactable interactable; ã®ããã«èšå®ã§ããªãã
ããã¯ãUnityã®ã·ãªã¢ã©ã€ãºã§ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãæ±ããªãããã§ãã
⢠ã€ã³ã¿ãŒãã§ãŒã¹ã¯å€æ°ãæãŠãªã
ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãã¡ãœããã®å®çŸ©ãããã§ããªãã®ã§ã倿°ãæã€ããšãåºæ¥ãŸããã
getter/setterãšãã£ãããããã£ãšäœ¿ã£ãããæœè±¡ã¯ã©ã¹ã䜿çšããããšã§ã倿°ãæãŠãŸãã
â£ å€æŽãå€ããšãã¯ãã€ãã³ããããScriptableObjectãã®æ¹ã䟿å©
ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãInteract()ãåŒã³åºããšæ±ºãŸã£ãåŠçãå®è¡ãããã ããªã®ã§ããã€ãã³ãã管çããããå Žåã¯ã¡ãã£ãšäœ¿ãã«ãããããããŸããã
äŸãã°ããã¬ã€ã€ãŒãEããŒãæŒãããšãã«è€æ°ã®ã¹ã¯ãªãããéç¥ãããå Žåãã€ã³ã¿ãŒãã§ãŒã¹ã ãšïŒã€ã®Interact()ã«åŠçãåºå®ãããŠããŸããŸãã
ãã®å Žåã¯ãUnityEventãäžç·ã«çµã¿åããããšäŸ¿å©ã«äœ¿ããããšæããŸãã
ãŸãšã
å ±æã®ä»çµã¿ãäœããããæ¡åŒµããããã®ã§ã¢ã¯ã·ã§ã³ã²ãŒã ããã©ãŒã²ãŒã ãšãã£ãæ§ã ãªä»æããå¿ èŠãšãªãã²ãŒã ã§ã¯äŸ¿å©ã«äœ¿ããæ©èœã§ãã
ã³ãŒããã¹ãããªããã®äžã«ããªããžã§ã¯ãã®è¿œå ã管çããããæ¥œã«ãªãã®ã§ã䜿ããããªå Žé¢ã§ãã²æŽ»çšããŠã¿ãŠãã ããã


