Ejemplo n.º 1
0
    /// <summary>
    /// クイックブースト
    /// </summary>
    public void QuickBoost()
    {
        if (BreakCheck())
        {
            return;
        }
        //現在の速度の方向を確認
        float nowAngle      = FuncBox.TwoPointAngleD(Vector3.zero, transform.right);
        float velocityAngle = FuncBox.TwoPointAngleD(Vector3.zero, rBody.velocity);
        float diff          = Mathf.Abs(Mathf.DeltaAngle(nowAngle, velocityAngle));

        //差が一定以上なら速度をほぼにする
        if (diff >= 45f)
        {
            rBody.velocity *= 0.2f;
        }
        Vector3 v = transform.right * quickBoostOutput;                 //移動量
        float   e = quickBoostEnergy;                                   //使用エネルギー

        if (!AddVelocity(v, e))
        {
            return;
        }
        //エフェクト
        IndicateQuickBoostEffect(true);
    }
Ejemplo n.º 2
0
 //始点からの角度を求める(スワイプ中のみ)
 public float GetAngle()
 {
     if (flagSwipe)
     {
         return(FuncBox.TwoPointAngleD(currentPosition, startPosition));
     }
     else
     {
         return(-1f);
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 方向表示の更新
 /// </summary>
 protected void UpdateDirectionIndicator()
 {
     //自身の
     playerDirection.transform.eulerAngles = player.transform.eulerAngles;
     //ロック対象の
     if (player.lockObject)
     {
         Vector3 angles = Vector3.zero;
         angles.z = FuncBox.TwoPointAngleD(player.transform.position, player.lockObject.transform.position);
         lockObjectDirection.transform.eulerAngles = angles;
     }
 }
 /// <summary>
 /// 方向表示の更新
 /// </summary>
 public void UpdateDirectionIndicator()
 {
     //機体角度
     shipDirection.transform.eulerAngles = player.transform.eulerAngles;
     //ロック対象との角度
     if (player.lockObject)
     {
         Vector3 angles = Vector3.zero;
         angles.z = FuncBox.TwoPointAngleD(player.transform.position, player.lockObject.transform.position);
         lockObjectDirection.transform.eulerAngles = angles;
     }
     //マーカーの表示
     //float cameraSize = sm.mainCamera.targetSize;
     //if(cameraSize >= ship.collisionRadius * 30f) {
     //	shipMarker.gameObject.SetActive(true);
     //} else {
     //	shipMarker.gameObject.SetActive(false);
     //}
 }
Ejemplo n.º 5
0
    public List <GameObject> buttons;           //ボタンオブジェクト(デフォルトでは子オブジェクトのリスト)
    #region 関数
    /// <summary>
    /// 指定角度内で一番近くの子オブジェクトを取得する
    /// </summary>
    protected GameObject GetNearChildren(float minAngle, float maxAngle)
    {
        if (buttons.Count == 0)
        {
            SetChildren();
        }
        if (!nowTarget)
        {
            SetNewTarget(startTarget);
            return(null);
        }
        //二次元平面(xy)で一番近いオブジェクトを探す
        float      disX = float.MaxValue;
        float      disY = 0;
        GameObject near = null;

        for (int i = 0; i < buttons.Count; i++)
        {
            if (nowTarget == buttons[i])
            {
                continue;
            }
            if (!buttons[i].activeInHierarchy)
            {
                continue;
            }
            //角度計測
            float angle = FuncBox.TwoPointAngleD(nowTarget.transform.position, buttons[i].transform.position);
            Debug.Log(angle);
            if (minAngle <= angle && angle <= maxAngle)
            {
                //距離計測
                disY = Vector3.Distance(nowTarget.transform.position, buttons[i].transform.position);
                if (disX > disY)
                {
                    near = buttons[i];
                    disX = disY;
                }
            }
        }
        return(near);
    }
Ejemplo n.º 6
0
    /// <summary>
    /// 角度移動
    /// </summary>
    public void MoveAngle(Vector2 direction)
    {
        if (BreakCheck())
        {
            return;
        }
        float angle = FuncBox.TwoPointAngleD(Vector2.zero, direction);
        //速度ベクトルの向きを変更
        float fromAngle     = FuncBox.TwoPointAngleD(Vector2.zero, rBody.velocity);
        float angleDistance = Mathf.Abs(Mathf.DeltaAngle(angle, fromAngle));

        //角度差が一定範囲の場合でブーストしている場合
        if (30 < angleDistance && angleDistance <= 170f && flagBoost)
        {
            float   lerpAngle     = Mathf.LerpAngle(fromAngle, angle, steering * Time.deltaTime);
            Vector3 velocityAngle = FuncBox.DegreeToVector3(lerpAngle);
            //速度の向き変更
            rBody.velocity = velocityAngle * (rBody.velocity.magnitude);
        }
        //角度を設定
        transform.eulerAngles = new Vector3(0f, 0f, angle);
    }
Ejemplo n.º 7
0
    //スワイプ操作
    protected void Swipe(int input = 0)
    {
        if (Input.GetMouseButton(input))
        {
            if (flagSwipe)
            {
                //マウスがどれだけ移動しているかを取得する
                prevPos = InverseMousePoint();
                offset  = startPos - prevPos;

                //カメラの移動
                if (flagCameraMove)
                {
                    Vector3 cPos = targetCamera.transform.position;
                    bool    isOut;
                    Vector3 p = FuncBox.MoveArea(cPos, offset, area, out isOut);
                    targetCamera.transform.position = p;
                    if (isOut)
                    {
                        offset = Vector3.zero;
                    }
                }

                //スプライト
                if (sprite)
                {
                    //長さを求める
                    distance   = sprite.transform.localScale;
                    distance.x = Vector3.Distance(prevPos, startPos);
                    sprite.transform.localScale = distance;
                    //角度を求める
                    angle = FuncBox.TwoPointAngleD(startPos, prevPos);
                    sprite.transform.eulerAngles = new Vector3(0f, 0f, angle);
                }
            }
            else
            {
                //マウスの位置を記憶しておく
                startPos  = InverseMousePoint();
                flagSwipe = true;

                //スプライト
                if (sprite)
                {
                    //sprite.transform.localPosition = startPos;
                    sprite.gameObject.SetActive(true);
                }
            }
        }
        else
        {
            //直前までスワイプしていた場合
            if (flagSwipe)
            {
                Debug.Log("スワイプ終了");
                if (sprite)
                {
                    sprite.gameObject.SetActive(false);
                }
                //円形UIとの連携
                if (circleUI)
                {
                    string str = circleUI.GetCircleValue(angle, distance.x);
                    if (activeDistance <= distance.x)
                    {
                        if (circleUIIventHandler)
                        {
                            circleUIIventHandler.SendMessage(circleUIIventName + str, angle);
                        }
                    }
                }
            }
            flagSwipe = false;
        }
    }