Beispiel #1
0
    void PullProcess()
    {
        List <GameObject> lineList = mHitPointManager.GetLineList();
        List <Vector2>    vecList  = mHitPointManager.GetHitPointList();

        Vector2 angle = Vec3ToVec2.GenVecFrom2Points(vecList[vecList.Count - 1], mStarObject.transform.position);

        Vector3 posInc = Time.deltaTime * mPullSpeed * new Vector3(angle.normalized.x, angle.normalized.y, 0f);

        mStarObject.transform.position += posInc;
        transform.position             += posInc;

        lineList[lineList.Count - 1].GetComponent <LineRenderer>().SetPosition(1, mStarObject.transform.position + Vector3.back);

        // 反射するところに近くなったら消す
        if (mDestroyLineDistance > Vector2.Distance(Vec3ToVec2.GenV3ToV2(mStarObject.transform.position), vecList [vecList.Count - 1]))
        {
            vecList.RemoveAt(vecList.Count - 1);
            Destroy(lineList[lineList.Count - 1]);
            lineList.RemoveAt(lineList.Count - 1);

            if (vecList.Count <= 0)
            {
                ChangeMoving();
            }
        }
    }
Beispiel #2
0
    void Start()
    {
        GameObject newPrefab = Instantiate(mPrefabLine, Vector3.zero, Quaternion.identity) as GameObject;

        newPrefab.GetComponent <LineRenderer> ().SetPosition(0, transform.position + Vector3.back);
        mHitPointManager.AddLineObject(newPrefab);
        mHitPointManager.AddHitPoint(Vec3ToVec2.GenV3ToV2(transform.position));
    }
Beispiel #3
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);
        }
    }
    public static Vector2 ToVec2(this Vector3 a, Vec3ToVec2 dir = Vec3ToVec2.xy)
    {
        switch (dir)
        {
        case Vec3ToVec2.xy: return(new Vector2(a.x, a.y));

        case Vec3ToVec2.xz: return(new Vector2(a.x, a.z));

        case Vec3ToVec2.yz: return(new Vector2(a.y, a.z));

        case Vec3ToVec2.yx: return(new Vector2(a.y, a.x));

        case Vec3ToVec2.zx: return(new Vector2(a.z, a.x));

        case Vec3ToVec2.zy: return(new Vector2(a.z, a.y));
        }
        return(new Vector2(a.x, a.y));
    }