Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

¥Ç¥Ð¥Ã¥°µ¡Ç½¤ÎɬÍ×À­


¡¡¥Ç¥Ð¥Ã¥°¤È¤Ï¡¢¥½¥Õ¥È¥¦¥§¥¢³«È¯¤ÎÃæ¤ÇȯÀ¸¤·¤¿¥Ð¥°¤ò¸«¤Ä¤±¡¢¤½¤Î¸¶°ø¤òõ¤ê¡¢½¤Àµ¤¹¤ë¤¿¤á¤Î¥×¥í¥»¥¹¤Ç¤¹¡£
¤³¤Î¥×¥í¥»¥¹¤Ï¡¢¥½¥Õ¥È¥¦¥§¥¢¤ÎÉʼÁ¤ò¹â¤á¤ë¤¿¤á¤ËÈó¾ï¤Ë½ÅÍפǤ¹¡£

¡¡Unity¤ò»ÈÍѤ·¤¿¥²¡¼¥à³«È¯¤Ç¤Ï¡¢¥Ç¥Ð¥Ã¥°µ¡Ç½¤Î»ÈÍѤÏÆä˽ÅÍפǤ¹¡£
£³£Ä¶õ´Ö¤äʪÍý¥¨¥ó¥¸¥ó¤ò»È¤Ã¤¿Æ°ºî¡¢AI¤ÎÆ°¤­¤Ê¤É¡¢Ê£»¨¤ÊÆ°ºî¤ò¥×¥í¥°¥é¥à¤¹¤ë¾ì¹ç¡¢»ë³ÐŪ¤ËµóÆ°¤ò³Îǧ¤¹¤ë¤³¤È¤Ç¡¢¥Ð¥°¤Î¸¶°øµæÌÀ¤¬·àŪ¤Ë¥¹¥à¡¼¥º¤Ë¤Ê¤ê¤Þ¤¹¡£


À©¸æ¤ÎɬÍ×À­


¡¡Unity¤Ï¥²¡¼¥àÀ©ºî¤ËɬÍפʥǥХ尤Τ¿¤á¤Îµ¡Ç½¤ò¿¿ôÍÑ°Õ¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¤½¤Î°ì¤Ä¤ËOnDrawGizmos¤È¤¤¤¦¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤ò»È¤¦¤³¤È¤Ç¡¢³«È¯Ãæ¤Î¥²¡¼¥à¥·¡¼¥ó¤Ë¤µ¤Þ¤¶¤Þ¤Ê·Á¾õ¤ä¥é¥¤¥ó¤òÉÁ²è¤·¡¢ÊªÂΤΰÌÃÖ¤ä°ÜÆ°ÈÏ°Ï¡¢¾×ÆÍÈϰϤʤɤò»ë³ÐŪ¤Ë³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤·¤«¤·¡¢¤³¤Î¥á¥½¥Ã¥É¤Ï¥¨¥Ç¥£¥¿¡¼¤Ç¥²¡¼¥à¤ò¼Â¹Ô¤·¤Æ¤¤¤Ê¤¤´Ö¤Ç¤â Scene¥Ó¥å¡¼¤Ë¤ª¤¤¤Æ¾ï¤ËÉÁ²è¤ò¹Ô¤Ã¤Æ¤·¤Þ¤¦¤¿¤á¡¢É¬Íפʻþ¤À¤±ÉÁ²è¤ò¹Ô¤¦¤è¤¦¤ËÀ©¸æ¤¹¤ë¤³¤È¤¬µá¤á¤é¤ì¤Þ¤¹¡£



¡¡°Ê²¼¤Ë¡¢OnDrawGizmos¥á¥½¥Ã¥É¤ÎÉÁ²è¤òÀ©¸æ¤¹¤ë¥µ¥ó¥×¥ë¥³¡¼¥É¤ò¼¨¤·¤Þ¤¹¡£
¤³¤Î¥¹¥¯¥ê¥×¥È¤Ç¤Ï¡¢SerializeField°À­¤ò»È¤Ã¤Æ¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éľÀÜÀ©¸æ¤Ç¤­¤ë¤è¤¦¤Ë¤·¡¢¥®¥º¥â¤ÎÉÁ²è¤ò¥ª¥ó¥ª¥Õ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

using UnityEngine;

public class DebugExample : MonoBehaviour
{
    [SerializeField] private bool isDebugMode = false;

    void OnDrawGizmos()
    {
        if (isDebugMode)
        {
            Gizmos.color = Color.red;
            Gizmos.DrawSphere(transform.position, 1.0f);
        }
    }
}


¡¡¤³¤Î¥¹¥¯¥ê¥×¥È¤òŬÍѤ·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ï¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éisDebugMode¤òÀ©¸æ¤¹¤ë¤³¤È¤Ç¥®¥º¥â¤ÎÉÁ²è¤òÀÚ¤êÂؤ¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤³¤Î¤è¤¦¤Ê¥¹¥¤¥Ã¥Á¤ÎÌò³ä¤ò»ý¤ÄÊÑ¿ô¤òÍÑ°Õ¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥½¡¼¥¹¥³¡¼¥É¼«ÂΤò½¤Àµ¤·¤Ê¤¯¤Æ¤â¡¢¥¤¥ó¥¹¥È¥é¥¯¥¿¡¼¤«¤é¥®¥º¥â¤ÎÉÁ²è¤ò¥ª¥ó/¥ª¥ÕÀÚ¤êÂؤ¨¤Ç¤­¤Þ¤¹¡£

¡¡OnDrawGizmos ¥á¥½¥Ã¥É¤Ï¡¢¥²¡¼¥à¤ò¼Â¹Ô¤·¤Æ¤¤¤Ê¤¯¤Æ¤â¡¢¥¨¥Ç¥£¥¿¡¼¤¬µ¯Æ°¤·¤Æ¤¤¤ë´Ö¤Ï¾ï¤Ë Scene¥Ó¥å¡¼¤ÇÆ°¤­Â³¤±¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥¨¥Ç¥£¥¿¡¼¤Ø¤ÎÉé²Ù¤¬¤«¤«¤Ã¤Æ¤¤¤ë¾õÂÖ¤¬Â³¤­¤Þ¤¹¡£

¡¡¤½¤³¤Ç¡¢º£²ó¤Î¤è¤¦¤ÊÀ©¸æÊýË¡¤òƳÆþ¤¹¤ë¤³¤È¤Ç¡¢É¬Íפˤʤ俤Ȥ­¤À¤±¥®¥º¥â¤ÎÉÁ²è¤ò¹Ô¤¤¡¢ÉÔÍפʻþ¤Ë¤ÏÉÁ²è¤ò¹Ô¤ï¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç
¥¨¥Ç¥£¥¿¡¼¤Ø¤ÎÉé²Ù¤ò·Ú¸º¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡

¡ã¥µ¥ó¥×¥ë¥³¡¼¥É¡ä


¡¡¾åµ­¤Î½èÍý¤òÍøÍѤ·¤¿¡¢¼ÂºÝ¤Ë¥²¡¼¥à¤ª¤±¤ë¥µ¥ó¥×¥ë¥³¡¼¥É¤âÄ󼨤·¤Æ¤ª¤­¤Þ¤¹¡£

¡¡¤³¤ì¤Ï£²£Ä¥²¡¼¥à¤Ë¤ª¤¤¤Æ¡¢¥³¥é¥¤¥À¡¼¤ÎÈÏ°ÏÆâ¤Ë¤¤¤ëÂоݤ«¤é¡¢ºÇ¤â¶á¤¤Å¨¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤·¤ÆÃƤòȯ¼Í¤¹¤ëµ¡Ç½¤Ç¤¹¡£
£±¤Ä¤Î¥¯¥é¥¹¤Ë¤·¤Æ¤¤¤Þ¤¹¤¬¡¢Å¬µ¹Ê¬³ä¤·¤Æµ­½Ò¤·¤Æ¤â¤è¤¤¤Ç¤·¤ç¤¦¡£

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;

// Physics2D.OverlapCircleNonAlloc
// https://docs.unity3d.com/ja/current/ScriptReference/Physics2D.OverlapCircleNonAlloc.html

// Physics2D.OverlapCircleAll
// https://docs.unity3d.com/ja/current/ScriptReference/Physics2D.OverlapCircleAll.html

public class BulletGenerator_AutoAim : MonoBehaviour
{
    [SerializeField] private Bullet bulletPrefab;
    
    [SerializeField] private int damage;
    [SerializeField] private float speed = 1000.0f;
    [SerializeField] private float interval = 2.0f;
      //  =>  BulletDataSO ¤òºîÀ®¤·¤¿¤é¡¢¤½¤³¤«¤é³Æ¥Ç¡¼¥¿¤ò¤â¤é¤Ã¤Æ»È¤¦

    [SerializeField] private LayerMask enemyLayer;  // LayerMask ÀßÄê¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ç¹Ô¤¦
    [SerializeField] private float radius = 2.0f;
    
    [SerializeField] private bool isDrawGizmoOn;    // ¥Ç¥Ð¥Ã¥°ÍѤε¡Ç½¤Î¥ª¥ó¥ª¥ÕÀÚ¤êÂؤ¨¤ò¼«Ê¬¤Çºî¤ë
    
    private bool isShooting;    // ÃƤÎÀ¸À®À©¸æ
    
    
    void Start()
    {
        // TODO BulletData ºîÀ®¸å¤Ï¡¢damage, speed, interval ¤ÎÃͤò BulletData ¤ÎÆâÍƤ˹¹¿·¤¹¤ë

    }
    
    void Update()
    {
        // ÃƤÎÏ¢¼ÍËÉ»ß
        if (isShooting) {
            return;
        }
        
        // ¹¶·âÍѤΥܥ¿¥ó¤ò²¡¤·¤¿¤é
        if (Input.GetButtonDown("Fire1") || Input.GetKeyDown(KeyCode.Return)) { // Fire1 = Left Ctrl

            // ¹¶·âÈÏ°ÏÆâ¤ËŨ¤¬¤¤¤ë¤«È½Äê
            DetectEnemiesInRange();
        }
    }
    
    /// <summary>
    /// ¹¶·âÈÏ°ÏÆâ¤ËŨ¤¬¤¤¤ë¤«È½Äꤷ¡¢Â¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï¥×¥ì¥¤¥ä¡¼¤ËºÇ¤â¶á¤¤Å¨¤òÆÃÄê
    /// </summary>
    private void DetectEnemiesInRange()
    {
¡¡¡¡¡¡¡¡// ÈÏ°ÏÆâ¤ÎÁ´¤Æ¤ÎŨ¤Î¥³¥é¥¤¥À¡¼¤ò¼èÆÀ


// ­¡OverlapCircleNonAlloc ¤Î¾ì¹ç(¤¿¤À¤·¡¢¾­ÍèŪ¤ËÈó¿ä¾©)


        // ÈÏ°ÏÆâ¤ÎÁ´¤Æ¤ÎŨ¤Î¥³¥é¥¤¥À¡¼¤ò¼èÆÀ¤¹¤ë¤¿¤á¤ÎÇÛÎó¤òÍÑ°Õ
        //Collider2D[] hitColliders = new Collider2D[10];  // 10¤Ï²¾¤Î¿ôÃͤǤ¹¡£¼ÂºÝ¤Ë¤ÏŬÀڤʿôÃͤòÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
        //int numColliders = Physics2D.OverlapCircleNonAlloc(transform.position, radius, hitColliders, enemyLayer);
        
        // ¹¶·âÈÏ°ÏÆâ¤ËŨ¤¬¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¡¢½èÍý¤·¤Ê¤¤
        // if (numColliders == 0) {
        //     return;
        // }

        
// ­¢OverlapCircleAll ¤Î¾ì¹ç


¡¡¡¡¡¡¡¡// ÈÏ°ÏÆâ¤ÎÁ´¤Æ¤ÎŨ¤Î¥³¥é¥¤¥À¡¼¤ò¼èÆÀ¤·¤ÆÇÛÎó¤Ë³ÊǼ
        Collider2D[] hitColliders = Physics2D.OverlapCircleAll(transform.position, radius, enemyLayer);

        // ¹¶·âÈÏ°ÏÆâ¤ËŨ¤¬¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¡¢½èÍý¤·¤Ê¤¤
        if (hitColliders.Length == 0) {
            Debug.Log("Ũ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó");
            return;
        }


// ¤³¤³¤«¤é¶¦Ä̽èÍý


        Debug.Log("Ũ¤òȯ¸« : " + hitColliders.Length + " ÂÎ");
        
        // ºÇ¤â¶á¤¤Å¨¤È¤½¤Îµ÷Î¥¤ÎÆó¾è¤òÊݸ¤¹¤ëÊÑ¿ô
        Collider2D nearestEnemy = null;
        float nearestDistanceSqr = float.MaxValue;

        // ÇÛÎóÆâ¤Î³ÆŨ¤ËÂФ·¤Æµ÷Î¥¤ÎÆó¾è¤ò·×»»¤·¡¢ºÇ¤â¶á¤¤Å¨¤ò¸«¤Ä¤±¤ë(OverlapCircleNonAlloc ¤Î¾ì¹ç¤Ï numColliders ¤ò»È¤¦)
        for (int i = 0; i < hitColliders.Length; i++)
        {
            // ¥×¥ì¥¤¥ä¡¼¤Î°ÌÃÖ¤ÈÇÛÎó¤ËÆþ¤Ã¤Æ¤¤¤ëŨ¤Î°ÌÃÖ¤ò·×»»¤·¤Æ¡¢Ê¿Êýº¬¤Ë¤¹¤ë
            float distanceSqr = (transform.position - hitColliders[i].transform.position).sqrMagnitude;
            //distanceSqr = (transform.position - hitColliders[i].transform.position).magnitude;
            //distanceSqr = Vector2.Distance(transform.position - hitColliders[i].transform.position);
            
            // º£²ó¤Îµ÷Î¥¤È¡¢¸½ºß¤ÎºÇ¤â¶á¤¤µ÷Î¥¤òÈæ³Ó
            if (distanceSqr < nearestDistanceSqr)
            {
                nearestDistanceSqr = distanceSqr;
                nearestEnemy = hitColliders[i];
            }
        }
        
        // ¾åµ­¤Î¶¦Ä̽èÍý¤ò Linq ¤Ë¤·¤¿¾ì¹ç(ÍÑ°Õ¤¹¤ë¥í¡¼¥«¥ëÊÑ¿ô¤Ï¸º¤ê¡¢for ʸ¤â¤Ê¤¯¤Ê¤ë¤¿¤á¡¢²ÄÆÉÀ­¤Ï¹â¤¯¤Ê¤ë¤¬¡¢Éé²Ù¤¬¤¢¤¬¤ë²ÄǽÀ­¤¬¤¢¤ë)
        // Collider2D nearestEnemy = 
        //     hitColliders
        //         .OrderBy(hit => (transform.position - hit.transform.position).sqrMagnitude)
        //         .FirstOrDefault(); // hitColliders[0]
        //
        // if (nearestEnemy == null) {
        //     Debug.Log("Ũ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó");
        //     return;
        // }

        Debug.Log("ºÇ¤â¶á¤¤Å¨¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ : " + nearestEnemy.gameObject.name);

¡¡¡¡¡¡¡¡// ÃƤòȯ¼Í¤·¤Æ¤¤¤ë¾õÂ֤ˤ¹¤ë => Ï¢¼ÍËÉ»ß
        isShooting = true;

¡¡¡¡¡¡¡¡// ¥×¥ì¥¤¥ä¡¼¤«¤é¸«¤¿Å¨¤ÎÊý¸þ¤ò»»½Ð¤·¡¢Àµµ¬²½(µ÷Î¥¤Ë¤è¤ë±ó¶á¤Ç¡¢ÃƤήÅÙ¤¬ÊѤï¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë)
        Vector2 direction = (nearestEnemy.transform.position - transform.position).normalized;

        // ºÇ¤â¶á¤¤Å¨¤Î¤¤¤ëÊý¸þ¤ËÂФ·¤ÆÃƤòȯ¼Í¤¹¤ë
        StartCoroutine(GenerateBullet(direction));
        
        // TODO ¥¢¥Ë¥áƱ´ü¤µ¤»¤ë¾ì¹ç¡¢direction ¤ÎÃͤòÍøÍѤ¹¤ì¤Ð¥×¥ì¥¤¥ä¡¼¤«¤é¸«¤¿Å¨¤ÎÊý¸þ¤Ë¤Ê¤ê¤Þ¤¹¡£

    }
    
    /// <summary>
    /// ÃƤòÀ¸À®¤·¤Æ¡¢È¯¼ÍÌ¿Îá¤ò¤¹¤ë
    /// </summary>
    /// <param name="direction"></param>
    /// <returns></returns>
    private IEnumerator GenerateBullet(Vector2 direction) {

¡¡¡¡¡¡¡¡// ¥¯¥é¥¹¤ÇÀ¸À®
        Bullet bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);

¡¡¡¡¡¡¡¡// ȯ¼ÍÌ¿Îá
        bullet.Shoot(damage, speed, direction);

¡¡¡¡¡¡¡¡// ÂÔµ¡»þ´Ö
        yield return new WaitForSeconds(interval);

¡¡¡¡¡¡¡¡// ºÆÅÙ¡¢ÃƤòȯ¼Í¤Ç¤­¤ë¾õÂÖ¤ËÌ᤹
        isShooting = false;
    }
    
    /// <summary>
    /// ¹¶·âÈϰϤβĻ벽(Scene¥Ó¥å¡¼)
    /// </summary>
    void OnDrawGizmos()
    {
        if (!isDrawGizmoOn) {
            return;
        }
        
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, radius);
    }
}

¡¡OnDrawGizmos ¥á¥½¥Ã¥É¤Ç¤Ï¡¢¾åµ­¤Î¤è¤¦¤ËÁá´ü¤Î return ʸ¤Ë¤¹¤ë¤³¤È¤Ç½èÍý¤Î²ÄÆÉÀ­¤ò¹â¤á¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡¾ò·ï¼°¤òºîÀ®¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢¡Á¤Ê¤é¤Ð¡¢¤È¹Í¤¨¤ë¤À¤±¤Ç¤Ï¤Ê¤¯¡¢¡Á¤Ç¤Ï¤Ê¤¤¤Ê¤é¡¢¤È¤¤¤¦Ê̤λëÅÀ¤â»ý¤Ä¤³¤È¤¬ÂçÀڤǤ¹¡£
¤½¤¦¤¹¤ë¤³¤È¤Ç½ÀÆð¤Ê½èÍý¤òºîÀ®¤·¤Æ¤¤¤¯¤³¤È¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤Þ¤¿¡¢Gizmos.DrawWireSphere ¥á¥½¥Ã¥ÉÆâ¤Î°ú¿ô¤Î¾ðÊó¤ò Physics2D.OverlapCircleAll ¥á¥½¥Ã¥É¤Î°ú¿ô¤ÈƱ¤¸ÊÑ¿ô¤Ë¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢
Physics2D.OverlapCircleAll ¥á¥½¥Ã¥É¤ÎÆâÍƤËϢư¤·¤¿¥®¥º¥â¤ÎÉÁ²è¤ò¹Ô¤¦¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£


// ÈÏ°ÏÆâ¤ÎÁ´¤Æ¤ÎŨ¤Î¥³¥é¥¤¥À¡¼¤ò¼èÆÀ¤·¤ÆÇÛÎó¤Ë³ÊǼ
Collider2D[] hitColliders = Physics2D.OverlapCircleAll(transform.position, radius, enemyLayer);

Gizmos.DrawWireSphere(transform.position, radius);

¡¡¤³¤Î¤è¤¦¤Ê·Á¤ÇÍøÍѤ¹¤ë¤È¡¢ÁÛÄꤷ¤Æ¤¤¤ëÄ̤ê¤Î¥®¥º¥âÉÁ²è¤ÎµóÆ°¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡
¡¡¥á¥½¥Ã¥É¤Î°ú¿ô¤òÍý²ò¤·¤¿¾å¤Ç¡¢ÊÑ¿ô¤ò¾å¼ê¤¯³èÍѤ·¤Þ¤·¤ç¤¦¡£
¡¡

¤½¤Î¾¤Î¥Ç¥Ð¥Ã¥°µ¡Ç½


¡¡Unity¤Ë¤Ï¤½¤Î¾¤Ë¤â¿¤¯¤Î¥Ç¥Ð¥Ã¥°µ¡Ç½¤¬¤¢¤ê¤Þ¤¹¡£

¡¡Î㤨¤Ð¡¢Debug.Log()¤ò»È¤¦¤³¤È¤Ç¥³¥ó¥½¡¼¥ë¤Ë¾ðÊó¤ò½ÐÎϤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤Þ¤¿¡¢Debug.DrawLine()¤ä Debug.DrawRay()¤ò»È¤¦¤³¤È¤Ç¡¢¥²¡¼¥à¥·¡¼¥ó¾å¤ËľÀþ¤ä¥ì¥¤¤òÉÁ²è¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£

¡¡¤³¤ì¤é¤Îµ¡Ç½¤ò¾å¼ê¤¯ÁȤ߹ç¤ï¤»¤ÆÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¥Ç¥Ð¥Ã¥°ºî¶È¤¬¤è¤ê¸úΨŪ¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡Î㤨¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È´Ö¤Îµ÷Î¥¤ò¬¤ë¥Ç¥Ð¥Ã¥°µ¡Ç½¤òºî¤ê¤¿¤¤¤È¤­¤Ë¤Ï¡¢Debug.DrawLine()¤¬ÌòΩ¤Á¤Þ¤¹¡£

¡¡°Ê²¼¤Ë¤½¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤ò¼¨¤·¤Þ¤¹¡£

using UnityEngine;

public class DebugLineExample : MonoBehaviour
{
    [SerializeField] private GameObject targetObject;
    [SerializeField] private bool isDebugMode = false;

    void Update()
    {
        if (isDebugMode && targetObject != null)
        {
            Debug.DrawLine(transform.position, targetObject.transform.position, Color.blue);
        }
    }
}

¡¡¤³¤Î¥¹¥¯¥ê¥×¥È¤òŬÍѤ·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ï¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éisDebugMode¤ÈtargetObject¤òÀßÄꤹ¤ë¤³¤È¤Ç¡¢
ÂоݤΥª¥Ö¥¸¥§¥¯¥È¤È¼«¿È¤È¤Î´Ö¤ËľÀþ¤ò°ú¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢¥ª¥Ö¥¸¥§¥¯¥È´Ö¤Îµ÷Î¥¤ä°ÌÃÖ´Ø·¸¤ò»ë³ÐŪ¤Ë³Îǧ¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤³¤ì¤é¤Î¥Ç¥Ð¥Ã¥°µ¡Ç½¤òŬÀڤ˻Ȥ¤Ê¬¤±¤ë¤³¤È¤Ç¡¢Unity¤Ç¤Î³«È¯¸úΨ¤È¥²¡¼¥à¤ÎÉʼÁ¸þ¾å¤ËÂ礭¤¯¹×¸¥¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


¤Þ¤È¤á


¡¡¥Ç¥Ð¥Ã¥°¤Ï¥²¡¼¥à³«È¯¤ÎÂçÀڤʰìÉô¤Ç¤¹¡£
Unity¤Ë¤ÏÊØÍø¤Ê¥Ç¥Ð¥Ã¥°µ¡Ç½¤¬Â¿¿ôÍÑ°Õ¤µ¤ì¤Æ¤ª¤ê¡¢¤½¤ì¤é¤ò¾å¼ê¤¯ÍøÍѤ¹¤ë¤³¤È¤Ç³«È¯¤Î¸úΨ²½¤ò¿Þ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡¡¤¿¤À¤·¡¢Ìµ°Ç¤Ë»ÈÍѤ¹¤ë¤È¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Ë±Æ¶Á¤òµÚ¤Ü¤¹¤³¤È¤¬¤¢¤ë¤Î¤Ç¡¢Å¬ÀÚ¤ÊÀ©¸æ¤ä»È¤¤Ê¬¤±¤¬µá¤á¤é¤ì¤Þ¤¹¡£

¡¡¾åµ­¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤ò»²¹Í¤Ë¡¢¼«Ê¬¤Î³«È¯¥¹¥¿¥¤¥ë¤Ë¹ç¤Ã¤¿¥Ç¥Ð¥Ã¥°µ¡Ç½¤òÀ߷פ·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£

¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu



´ðÁÃ

µ»½Ñ/Ãμ±(¼ÂÁõÎã)

3D¥¢¥¯¥·¥ç¥ó¥²¡¼¥à

2D¤ª¤Ï¤¸¤­¥²¡¼¥à(ȯŸÊÔ)

2D¶¯À©²£¥¹¥¯¥í¡¼¥ë¥¢¥¯¥·¥ç¥ó(ȯŸÊÔ)

2D¥¿¥Ã¥×¥·¥å¡¼¥Æ¥£¥ó¥°(³ÈÄ¥ÊÔ)

¥ì¡¼¥¹¥²¡¼¥à(È´¿è)

2DÊüÃÖ¥²¡¼¥à(ȯŸÊÔ)

3D¥ì¡¼¥ë¥¬¥ó¥·¥å¡¼¥Æ¥£¥ó¥°(±þÍÑÊÔ)

3Dæ½Ð¥²¡¼¥à(È´¿è)

2D¥ê¥¢¥ë¥¿¥¤¥à¥¹¥È¥é¥Æ¥¸¡¼

3D¥¿¥Ã¥×¥¢¥¯¥·¥ç¥ó(NavMeshAgent »ÈÍÑ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥«¥¨¥ë¤Î°Ù¤Ë¡Á¡¢¥Ü¥³¥¹¥«¥¦¥©¡¼¥ºÉ÷)

VideoPlayer ¥¤¥Ù¥ó¥ÈϢư¤Î¼ÂÁõÎã

VideoPlayer ¥ê¥¹¥ÈÆ⤫¤é¥à¡¼¥Ó¡¼ºÆÀ¸¤Î¼ÂÁõÎã(ȯŸ)

AR ²èÁüÉÕ¤­¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®¤Î¼ÂÁõÎã

AR ¥ê¥¹¥ÈÆ⤫¤éÀ¸À®¤Î¼ÂÁõÎã(ȯŸ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥µ¥Ð¥¤¥Ð¡¼É÷)

private



¤³¤Î¥µ¥¤¥ÈÆâ¤ÎºîÉʤϥæ¥Ë¥Æ¥£¤Á¤ã¤ó¥é¥¤¥»¥ó¥¹¾ò¹à¤Î¸µ¤ËÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹