Exemple #1
0
    /// <summary>
    /// 蝙蝠のFixedUpdate
    /// </summary>
    protected override void EnemyUpdate()
    {
        int layer = LayerName.GetXMoveHitLayer();

        if (Physics.BoxCast(enemyCenterPos, boxSize, tPos - transform.position, new Quaternion(0, 0, 0, 0), boxRaySize, layer, QueryTriggerInteraction.Ignore))
        {
            moveDir = -moveDir;
            tPos    = new Vector3(transform.position.x, stPos.y, transform.position.z) + new Vector3(moveDir * moveXSize, Mathf.Sin(sinNam) * upNam, 0);
        }

        Debug.DrawRay(enemyCenterPos, (tPos - transform.position) * boxRaySize, Color.blue, 0.2f);

        if (transform.position == tPos)
        {
            sinNam += sinSpeed;
            tPos    = new Vector3(transform.position.x, stPos.y, transform.position.z) + new Vector3(moveDir * moveXSize, Mathf.Sin(sinNam) * upNam, 0);
        }
        transform.position = Vector3.MoveTowards(transform.position, tPos, moveSpeed);
    }
 protected override void EnemyUpdate()
 {
     base.EnemyUpdate();
     if (Physics.BoxCast(enemyCenterPos, boxSize, Vector3.right * moveDir, new Quaternion(0, 0, 0, 0), boxRaySize, LayerName.GetXMoveHitLayer(), QueryTriggerInteraction.Ignore))
     {
         moveDir = -moveDir;
         ChackMoveDir();
     }
     else
     {
         transform.position += new Vector3(moveSpeed * moveDir, 0, 0);
     }
     if (count == createTime)
     {
         count = 0;
         CreateGameobj();
     }
     count++;
 }
 /// <summary>
 /// 天使のFixedUpdate
 /// </summary>
 protected override void EnemyUpdate()
 {
     if (down)//降下
     {
         if (Physics.BoxCast(enemyCenterPos, rayBoxSize, Vector3.down, new Quaternion(0, 0, 0, 0), downRaySize, LayerName.GetObjectHitLayer(), QueryTriggerInteraction.Ignore))
         {
             down          = false;
             downSizeCount = 0;
         }
         else
         {
             transform.position += Vector3.down * moveSpeed;
             downSizeCount      += moveSpeed;
             if (downSizeCount >= downSize)
             {
                 down          = false;
                 downSizeCount = 0;
             }
         }
     }
     else//左右移動
     {
         RaycastHit hit;
         if (Physics.BoxCast(enemyCenterPos, rayBoxSize, new Vector3(moveDir, 0, 0), out hit, new Quaternion(0, 0, 0, 0), raySize, LayerName.GetXMoveHitLayer(), QueryTriggerInteraction.Ignore))
         {
             if (hit.transform.CompareTag("enemy"))
             {
                 //反転
                 moveDir = -moveDir;
             }
             else if (hit.transform.CompareTag("wall") || hit.transform.CompareTag("blockObj"))
             {
                 //降下
                 down    = true;
                 moveDir = -moveDir;
             }
         }
         else
         {
             transform.position += new Vector3(moveSpeed * moveDir, 0, 0);
         }
     }
 }
Exemple #4
0
    protected override void EnemyUpdate()
    {
        base.EnemyUpdate();
        if (loopObj != null)
        {
            GetComponent <Rigidbody>().useGravity = false;
            GetComponent <Rigidbody>().velocity   = new Vector3(0, 0, 0);

            RaycastHit hit;
            if (BlockRayHit(enemyCenterPos, blockHitBoxScale, -rotateObj.transform.up, out hit))
            {
                loopObj = hit.transform.gameObject;

                transform.position += -rotateObj.transform.right * moveSpeed * moveDir;
                if (RotateRayHit(enemyCenterPos, rayBoxScale, -rotateObj.transform.right, out hit))
                {
                    loopObj  = hit.transform.gameObject;
                    moveNam += 4 - moveDir;
                    moveNam %= 4;
                    rotateObj.transform.eulerAngles = rotates[moveNam];

                    transform.position = hit.point + (rotateObj.transform.up * addP);

                    Debug.Log("壁移り");
                }
            }

            else
            {
                moveNam += 4 + moveDir;
                moveNam %= 4;
                rotateObj.transform.eulerAngles = rotates[moveNam];

                transform.position += -rotateObj.transform.right * moveSpeed * 3 * moveDir;
                if (BlockRayHit(enemyCenterPos, blockHitBoxScale, -rotateObj.transform.up, out hit))
                {
                    transform.position = hit.point + (rotateObj.transform.up * addP);
                    Debug.Log("壁回転 : 座標調整");
                    loopObj = hit.transform.gameObject;
                }
                else
                {
                    loopObj = null;
                }
                Debug.Log("壁回転");
            }
        }
        else
        {
            rotateObj.transform.eulerAngles       = rotates[0];
            GetComponent <Rigidbody>().useGravity = true;
            RaycastHit hit;

            if (Physics.BoxCast(enemyCenterPos + new Vector3(0, 0.1f, 0), rayBoxScale, Vector3.down, out hit, Quaternion.Euler(rotates[0]), blockHitRay, LayerName.GetObjectHitLayer(), QueryTriggerInteraction.Ignore))
            {
                if (hit.transform.CompareTag("wall") || (hit.transform.CompareTag("endWall")))
                {
                    if (Physics.BoxCast(enemyCenterPos, rayBoxScale, new Vector3(grMoveDir, 0, 0), Quaternion.Euler(rotates[0]), rotateRaySize, LayerName.GetXMoveHitLayer(), QueryTriggerInteraction.Ignore))
                    {
                        grMoveDir = -grMoveDir;
                    }
                    transform.position += new Vector3(grMoveDir * moveSpeed, 0, 0);
                }
                else
                {
                    loopObj = hit.transform.gameObject;
                    moveNam = 0;
                    GetComponent <Rigidbody>().velocity = new Vector3(0, 0, 0);
                    transform.position = hit.point + (rotateObj.transform.up * addP);
                }
            }
        }
    }