Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        // 移動中
        if (mMovePointX != float.MaxValue)
        {
            Movement();
        }

        // debug
        if (Input.GetKeyUp("mouse 0"))
        {
            Vector3 tmp = PointaToPosition.ChangeToPostion(Input.mousePosition);

            if (tmp.y > mTouchLimitY)
            {
                return;
            }

            if (Mathf.Abs(tmp.x - transform.position.x) > mIgnoreDistance)
            {
                mMovePointX = tmp.x;
            }
            else
            {
                ChangeAttack();
            }
        }

        if (Input.touchCount > 0)
        {
            Touch   touch = Input.GetTouch(0);
            Vector3 tmp   = PointaToPosition.ChangeToPostion(new Vector3(touch.position.x, 0f, 0f));

            if (tmp.y > mTouchLimitY)
            {
                return;
            }

            // 移動判定
            if (Mathf.Abs(tmp.x - transform.position.x) > mIgnoreDistance)
            {
                mMovePointX = tmp.x;
            }
            else                // 狙いうちに移行
            {
                ChangeAttack();
            }
        }
    }
Esempio n. 2
0
    void Preparation()
    {
        mFirstLine.enabled = true;

        // 角度をつける
        Vector3 diff = PointaToPosition.ChangeToPostion(Input.mousePosition) - transform.position;

        float angle = Mathf.Atan2(diff.x, diff.y);

        angle = Mathf.Rad2Deg * angle;          // rad→角度
        angle = Mathf.Clamp(angle, (-1) * mAngleLimit, mAngleLimit);

        transform.rotation = Quaternion.AngleAxis(angle, Vector3.back);

        // ガイドラインが反射する可能性を考慮
        Vector2      vec2Pos = new Vector2(transform.position.x, transform.position.y);
        RaycastHit2D hit     =
            Physics2D.Raycast(vec2Pos,
                              Vec3ToVec2.GenVecFrom2Points(mTargetTrans.position, transform.position).normalized,
                              Vec3ToVec2.CalcDistanceOn2D(transform.position, mTargetTrans.position));

        // 反射したかを考えてガイドラインを表示
        if (hit.collider != null)
        {
            // 一本目の線
            Vector3 middle = new Vector3(hit.point.x, hit.point.y);
            mFirstLine.SetPosition(0, transform.position + Vector3.back);
            mFirstLine.SetPosition(1, middle + Vector3.back);

            // 二本目の線
            float remainLength = Vec3ToVec2.CalcDistanceOn2D(transform.position, mTargetTrans.position)
                                 - Vec3ToVec2.CalcDistanceOn2D(transform.position, middle);

            Vector2 tmp          = Vec3ToVec2.GenVecFrom2Points(mTargetTrans.position, transform.position).normalized;
            Vector3 reflectAngle = new Vector3(tmp.x * (-1), tmp.y, 0);

            mObjectIncludeLine.SetActive(true);
            mObjectIncludeLine.GetComponent <LineRenderer> ().SetPosition(0, middle + Vector3.back);
            mObjectIncludeLine.GetComponent <LineRenderer> ().SetPosition(1, middle + reflectAngle.normalized * remainLength);
        }
        else
        {
            mFirstLine.SetPosition(0, transform.position + Vector3.back);
            mFirstLine.SetPosition(1, mTargetTrans.position + Vector3.back);
            mObjectIncludeLine.SetActive(false);
        }
    }
Esempio n. 3
0
    // Update is called once per frame
    void Update()
    {
        Vector3 point = PointaToPosition.ChangeToPostion(Input.mousePosition);

        point = new Vector3(point.x, point.y, 0f);

        if (Input.GetKey("mouse 0") &&
            Vector3.Distance(point, GameObject.FindGameObjectWithTag("Player").transform.position) <= mNotifiRadius)
        {
            isPulling = true;
            PullProcess();
        }
        else if (isPulling)             // 離した(上のif文に入ってないので)
        {
            ChangeMoving();
        }
    }