void ShoutOut()
    {
        if (hit_sphere.activeSelf)
        {
            hit_sphere.SetActive(false);
            InAttackRange();
        }
        if (kinds != ArrowsKind.normal)
        {
            box.enabled = false;
        }
        controll.islunch = true;
        temp             = Vector3.Distance(leftrain.transform.position, rightrain.transform.position);
        //Debug.Log(bstatus.ToString() + "<<<<<<<<<<<<");
        if (rb != null)
        {
            rb.mass           = 0.2f;
            rb.angularDrag    = 0;
            rb.freezeRotation = true;

            switch (kinds)
            {
            case ArrowsKind.normal:
                if (temp < 0.15f)
                {
                    rb.AddForce(-bullet.transform.up * 10f);
                }
                else
                {
                    rb.AddForce(-bullet.transform.up * 1000f * (temp - 0.15f));
                }
                controll.endpos = arrowstop;
                break;

            case ArrowsKind.torch:
            case ArrowsKind.ice:

                rb.AddForce(-bullet.transform.up * 1000f);
                break;

            default:
                break;
            }
        }
        else
        {
            Debug.Log("withoutrigidbody");
        }

        status      = shootstatus.stay;
        bstatus     = bulletstatus.none;
        kinds       = ArrowsKind.normal;
        fire_status = firestatus.reday;
        if (fire != null && bullet != null)
        {
            fire.transform.SetParent(bullet.transform);
        }
        // Destroy(fire, 1f);
        isfireon = false; /*重置箭头火焰是否点着*/
    }
 void Awake()
 {
     kinds       = ArrowsKind.normal;
     status      = shootstatus.none;
     bstatus     = bulletstatus.none;
     fire_status = firestatus.reday;
     mask        = LayerMask.GetMask("Floor");
 }
    /// <summary>
    /// 检查距离改变状态
    /// </summary>
    /// <param name="me">自身</param>
    /// <param name="target">目标</param>
    /// <param name="key">扳机键</param>

    void Chekdic(Transform me, Transform target, bool key)
    {
        temp = Vector3.Distance(me.position, target.position);
        switch (status)
        {
        case shootstatus.none:
            if (temp < 2f && key)
            {
                //Debug.Log("nonenonenone");
                timer += Time.deltaTime;
                if (timer > 3f)
                {
                    status = shootstatus.stay;
                    target.SetParent(me);
                    target.transform.localPosition = Vector3.zero;
                    target.transform.localRotation = Quaternion.identity;
                    handfirst = me.gameObject;
                }
            }
            break;

        case shootstatus.stay:
            CreatArrows();
            break;

        case shootstatus.shoot:
            ShoutOut();
            break;

        case shootstatus.lose:
            //  ShowRanking();
            break;

        default:
            break;
        }
    }
 void GameEnd()
 {
     status = shootstatus.lose;
 }
    void CreatArrows()
    {
        //调整箭的方向,箭的旋转,发射出去的就不管了
        Vector3 tempforward = Vector3.one;

        if (bullet != null && handfirst == rightrain && !bullet.GetComponent <Bulletcontroll>().islunch)
        {
            bullet.transform.up = Vector3.Normalize(leftrain.transform.position
                                                    - bow.transform.position);
            tempforward = -bullet.transform.up;
            // Debug.DrawLine(target.transform.position, leftrain.transform.position, Color.red);
            //  arrows.transform.localEulerAngles = new Vector3(0, leftrain.transform.eulerAngles.y, -90);
        }
        else if (bullet != null && handfirst == leftrain && !bullet.GetComponent <Bulletcontroll>().islunch)
        {
            bullet.transform.up = Vector3.Normalize(rightrain.transform.position
                                                    - bow.transform.position);
            tempforward = -bullet.transform.up;
            // Debug.DrawLine(target.transform.position, rightrain.transform.position, Color.red);
            // arrows.transform.localEulerAngles = new Vector3(0, rightrain.transform.eulerAngles.y, -90);
        }
        //判断哪只手柄拿着弓
        if (handfirst.Equals(leftrain))
        {
            if (bstatus == bulletstatus.none)
            {
                Choiseparent(rightrain, msg.Rightkey);
            }
            if (msg.Rightkey && bstatus == bulletstatus.ready)
            {
                Vector3 tempvec = Vector3.Normalize(leftrain.transform.position - rightrain.transform.position);

                float limitshaking = Vector3.Distance(leftrain.transform.position, rightrain.transform.position);
                if (limitshaking > 0.15f)
                {
                    if (limitshaking * 10 % 2f <= 0.4f)
                    {
                        //Debug.Log("11111111111");
                        RainsShaking(SteamVR_Controller.DeviceRelation.Rightmost, 3000);
                        RainsShaking(SteamVR_Controller.DeviceRelation.Leftmost, 3000);
                    }
                }
                bowstring.transform.position = rightrain.transform.position;
                AttackRange(tempforward, leftrain);
            }
            if (!msg.Rightkey && bstatus == bulletstatus.ready)
            {
                bowstring.transform.localPosition = bowsoldpos;
                bstatus = bulletstatus.lunch;
            }
            if (!msg.Rightkey && bstatus == bulletstatus.lunch)
            {
                status         = shootstatus.shoot;
                rb.isKinematic = false;
                bullet.transform.SetParent(null);
            }
        }
        else
        {
            if (bstatus == bulletstatus.none)
            {
                Choiseparent(leftrain, msg.Leftkey);
            }
            if (msg.Leftkey && bstatus == bulletstatus.ready)
            {
                float limitshaking = Vector3.Distance(leftrain.transform.position, rightrain.transform.position);
                // target.transform.LookAt(leftrain.transform.position);
                if (limitshaking > 0.15f)
                {
                    //手柄靠近时震动
                    if (limitshaking < 0.3f)
                    {
                        // RaisShaking(SteamVR_Controller.DeviceRelation.Leftmost, 800);
                        //var deviceIndex2 = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
                        //SteamVR_Controller.Input(deviceIndex2).TriggerHapticPulse(800);
                    }
                    if (limitshaking * 10 % 2f <= 0.4f)
                    {
                        RainsShaking(SteamVR_Controller.DeviceRelation.Rightmost, 3000);
                        RainsShaking(SteamVR_Controller.DeviceRelation.Leftmost, 3000);
                        //var deviceIndex2 = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
                        //SteamVR_Controller.Input(deviceIndex2).TriggerHapticPulse(800);
                    }
                }
                bowstring.transform.position = leftrain.transform.position;
                AttackRange(tempforward, rightrain);
            }
            if (!msg.Leftkey && bstatus == bulletstatus.ready)
            {
                bowstring.transform.localPosition = bowsoldpos;
                bstatus = bulletstatus.lunch;
            }
            if (!msg.Leftkey && bstatus == bulletstatus.lunch)
            {
                status         = shootstatus.shoot;
                rb.isKinematic = false;
                bullet.transform.SetParent(null);
            }
        }
    }