¡¡¾åµ¤Î£³¤Ä¤Î¥¯¥é¥¹¤ò¤Þ¤È¤á¤Æ´ÉÍý¤¹¤ë¥¯¥é¥¹¤Ç¤¹¡£
¤³¤Î¥¯¥é¥¹¤Ë¤Ï RequireComponent °À¤òÉÕÍ¿¤·¡¢³ºÅö¤¹¤ë£³¤Ä¤Î¥¯¥é¥¹¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢
¤³¤Î¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤¹¤ë¤È¡¢Àè¤Û¤É¤Î£³¤Ä¤Î¥¯¥é¥¹¤â¼«Æ°Åª¤ËÄɲäǥ¢¥¿¥Ã¥Á¤µ¤ì¤Þ¤¹¡£
¥¢¥¿¥Ã¥Á¤Î¼ê´Ö¤¬¾Ê¤±¤ë¤È¤È¤â¤Ë¡¢¥¢¥¿¥Ã¥Á˺¤ì¤òËɻߤ¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£
¡¡¤³¤Î¥¯¥é¥¹¤Î¤ß¤¬£³¤Ä¤Î¥¯¥é¥¹¤ò¥á¥ó¥ÐÊÑ¿ô¤È¤·¤Æ´ÉÍý¤·¡¢¤½¤ì¤¾¤ì¤Î½èÍý¤ËÂФ·¤ÆÌ¿Îá¤ò½Ð¤·¤Æ¤¤¤Þ¤¹¡£
¥È¥Ã¥×¥À¥¦¥ó·¿¤Î¤è¤¦¤ÊÌ¿Îá·ÏÅý¤Î»ÅÁȤߤò¥¤¥á¡¼¥¸¤·¤Æ¤â¤é¤¨¤ì¤Ðʬ¤«¤ê¤ä¤¹¤¤¤Ç¤·¤ç¤¦¡£
¡¡¤Þ¤¿¶¦Ä̤νèÍý¤È¤·¤Æ¥¥ã¥é¤ÎÊý¸þ¤Î¾ðÊó¤ò´ÉÍý¤·¡¢¤½¤Î¾ðÊó¤ò¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Î¥¯¥é¥¹¤È¹¶·â¤Î¥¯¥é¥¹¤ËÂФ·¤Æ¡¢¥á¥½¥Ã¥É¤òÄ̤¸¤ÆÅϤ·¤Æ¤¤¤Þ¤¹¡£
¤³¤¦¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢
³Æ¥¯¥é¥¹Æâ¤ÇȽÄê¤ò¤µ¤»¤ëɬÍפʤ¯¡¢¶¦Ä̤ÎÃͤò¤½¤ì¤¾¤ì¤Î¥¯¥é¥¹¤ËÍøÍѤ·¤Æ¤â¤é¤¦À߷פǤ¹¡£
¡¡¤¿¤À¤·¡¢½èÍý¤Î¥¿¥¤¥ß¥ó¥°¤ÎÌäÂê¤Ç¡¢¤³¤Î¥á¥½¥Ã¥É¤Î°ú¿ô¤ÇÅϤ¹ÊýË¡¤Ç¤Ï¡¢Êý¸þ¤Î¾ðÊó¤òÅϤ»¤Ê¤¤¥¯¥é¥¹(CharaAttack)¤â¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ï¹¶·â½èÍý¤Î¥¿¥¤¥ß¥ó¥°¤¬ CharaManager ¤Ç¤Ï¤Ê¤¯¡¢CharaAttack ¤Ë°Í¸¤·¤Æ¤¤¤ë¤¿¤á¡¢¾ï¤ËºÇ¿·¤ÎÃͤòÅϤ·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
¡¡ºÇ¤â´Êñ¤ÊÊý¸þ¾ðÊó¤ÎÅϤ·Êý¤Ï¡¢CharaManager ¥¯¥é¥¹¤Î Update ¥á¥½¥Ã¥É¤Ç CharaAttack Æâ¤ËÍÑ°Õ¤·¤Æ¤¢¤ëÊý¸þ¾ðÊó¤ÎÃͤò¿ï»þ¹¹¿·¤¹¤ë¤â¤Î¤Ç¤¹¡£
¤³¤ì¤Ç¤¢¤ì¤Ð¡¢¤¤¤Ä¹¶·â¤Î½èÍý¤ò¤ª¤³¤Ê¤Ã¤Æ¤âºÇ¿·¤ÎÊý¸þ¤Î¾ðÊó¤òÍøÍѤǤ¤Þ¤¹¡£
¡¡º£²ó¤Ï¤½¤Î¥¢¥×¥í¡¼¥Á¤Ç¤Ï¤Ê¤¯¡¢CharaAttack ¥¯¥é¥¹¤Ë¥×¥í¥Ñ¥Æ¥£¤òÍÑ°Õ¤·¡¢¤½¤Î»²¾ÈÀè¤ò CharaManager ¥¯¥é¥¹¤ÎÊý¸þ¾ðÊó¤Èɳ¤Å¤±¤Þ¤¹¡£
¥×¥í¥Ñ¥Æ¥£¤òÄ̤¸¤ÆÃͤòÀßÄꤹ¤ë¤È¡¢ÆâÉô¤Ç¤ÎÃͤΥ³¥Ô¡¼¤¬¹Ô¤ï¤ì¡¢¤½¤Î¸å¤â³°ÉôÊÑ¿ô¤¬¹¹¿·¤µ¤ì¤ë¤È¥×¥í¥Ñ¥Æ¥£¤Î¥»¥Ã¥¿¡¼¤¬¸Æ¤Ó½Ð¤µ¤ì¤ÆÃͤ¬¹¹¿·¤µ¤ì¤Þ¤¹¡£
¤³¤Î»ÅÁȤߤˤè¤ê¡¢CharaAttack ¥¯¥é¥¹Â¦¤Ç¤â¡¢
ºÇ¿·¤Î¾ðÊó¤ò¥×¥í¥Ñ¥Æ¥£¤òÄ̤¸¤Æ»²¾È¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤Ê¤ªº£²ó¤Ï½èÍý¤Î³Îǧ¤Î¤¿¤á¡¢Start ¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ½èÍý¤ò¥¹¥¿¡¼¥È¤µ¤»¤Æ¤¤¤Þ¤¹¤¬¡¢
¼ÂºÝ¤Ë¤Ï³°Éô¥¯¥é¥¹¤«¤é SetUpCharaManager ¥á¥½¥Ã¥É¤Ø¼Â¹ÔÌ¿Îá¤ò¼õ¤±¤ÆÆ°¤¤¤Æ¤¤¤¯Á°Äó¤ÇÀ߷פ·¤Æ¤¤¤Þ¤¹¡£
<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤¤Þ¤¹¡£
using UnityEngine;
/// <summary>
/// ¥¥ã¥é¤Î´ÉÍý¥¯¥é¥¹
/// </summary>
[RequireComponent(typeof(CharaMove))]
[RequireComponent(typeof(CharaAnime))]
[RequireComponent(typeof(CharaAttack))]
public class CharaManager : MonoBehaviour
{
private CharaMove charaMove;
private CharaAnime charaAnime;
private CharaAttack charaAttack;
private Vector2 direction; //¥¥ã¥é¤¬¸þ¤¤¤Æ¤¤¤ëÊý¸þ
// direction ¤Î¥×¥í¥Ñ¥Æ¥£¡£ÆâÉô¤Ç CharaAttack ¤Î AttackDirection ¥×¥í¥Ñ¥Æ¥£¤âƱ»þ¤Ë¹¹¿·¤·¤Æ¤¤¤ë
public Vector2 Direction {
get => direction;
set {
direction = value;
if (charaAttack) {
charaAttack.AttackDirection = value;
}
}
}
void Start() {
// ¥Ç¥Ð¥Ã¥°ÍÑ
SetUpCharaManager();
}
/// <summary>
/// ³Æ¥¯¥é¥¹¤Î½é´üÀßÄê¡£³°Éô¥¯¥é¥¹¤«¤é¼Â¹Ô¤¹¤ëÁ°Äó
/// </summary>
public void SetUpCharaManager() {
// ¤³¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë IChara ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î¥¯¥é¥¹¤ò¼èÆÀ¤·¤ÆÇÛÎó¤ËÂåÆþ
IChara[] charas = GetComponents<IChara>();
// ³Æ¥¯¥é¥¹¤Î½é´üÀßÄê(¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¾ðÊó¤Ç¥¯¥é¥¹¤ò¼èÆÀ¤·¤Æ¤¢¤ë¤Î¤Ç¡¢¥¯¥é¥¹Ì¾¤¬¤½¤ì¤¾¤ì°ã¤Ã¤Æ¤¤¤Æ¤â foreach ¤Ç¤Þ¤È¤á¤Æ½èÍý¤Ç¤¤ë)
foreach (var chara in charas) {
chara.SetUpChara();
}
// ³Æ¥¯¥é¥¹¤Î¼èÆÀ
TryGetComponent(out charaMove);
TryGetComponent(out charaAnime);
if(TryGetComponent(out charaAttack))
{
// ¹¶·â½àÈ÷
charaAttack.PrepareAttackRepeatedly();
}
}
void Update()
{
// null ¥Á¥§¥Ã¥¯
if (charaMove == null || charaAnime == null) {
return;
}
// ¥¿¥Ã¥×ÆþÎÏ
if (Input.GetMouseButton(0)) {
// ¥¿¥Ã¥×¤·¤¿°ÌÃÖ¤«¤é¥ï¡¼¥ë¥ÉºÂɸ¼èÆÀ
Vector2 tapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// °ÜÆ°¤È¥¢¥Ë¥áƱ´ü
charaMove.Move(tapPos);
// ¸þ¤¤Î¹¹¿·
UpdateDirection(tapPos);
// °ÜÆ°¸þ¤¤È¥¢¥Ë¥á¤Î¸þ¤¤ÎƱ´ü
charaAnime.UpdateAnimation(Direction);
}
// ¹¶·â¤Î°ì»þÄä»ß¤ÈºÆ³«
if (Input.GetMouseButtonDown(1))
{
// ¹¶·â¤Î°ì»þÄä»ß¡¦ºÆ³«¤òÀÚ¤êÂؤ¨¤ë
charaAttack.ToggleAttack();
}
}
/// <summary>
/// ¸þ¤¤Î¹¹¿·
/// </summary>
/// <param name="newPos"></param>
private void UpdateDirection(Vector2 newPos)
{
// Direction ¥×¥í¥Ñ¥Æ¥£¤ò¹¹¿·¤¹¤ë¡£Æ±»þ¤Ë CharaAttack ¥¯¥é¥¹¤Î AttackDirection ¥×¥í¥Ñ¥Æ¥£¤â¹¹¿·¤µ¤ì¤ë
Direction = (newPos - (Vector2)transform.position).normalized;
}
}