示例#1
0
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent <Animator>();

        pit = GetComponentInChildren <PitPoint>();


        InitTale(Tale);


        for (int i = 0; i < Tales.Count; i++)
        {
            Transform t = Tales[i];

            Transform ik = new GameObject("IKObj").transform;
            ik.parent = t.parent;
            ik.transform.localPosition = t.localPosition;

            Transform dIK = new GameObject("dIKObj").transform;
            dIK.position = t.parent.position;
            dIK.rotation = t.parent.rotation;

            if (i + 1 < Tales.Count)
            {
                ik.LookAt(Tales[i + 1]);
            }
            else
            {
                ik.LookAt(ik.position + (ik.position - Tales[i - 1].position));
            }
            dIK.parent = ik;
            t.parent   = dIK;

            ikTales.Add(ik, ik.localRotation);
        }



        lr               = gameObject.AddComponent <LineRenderer>();
        lr.startWidth    = 0.1f;
        lr.endWidth      = 0.1f;
        lr.positionCount = 2;
    }
示例#2
0
    private void FixedUpdate()
    {
        float TimeSpeed = Time.deltaTime * 10f;

        //defenseモード切替
        ballingFlag_prev  = ballingFlag;
        inPlayerFlag_prev = inPlayerFlag;

        if (kb_L3.EnterCheck(defenseDelay <= 0f))
        {
            ballingFlag  = !ballingFlag;
            inPlayerFlag = ballingFlag;
            defenseDelay = 0.3f;

            if (ballingFlag)
            {
                currentPit = PitPoint.search(transform);
            }
            else
            {
                currentPit       = null;
                rb.isKinematic   = false;
                transform.parent = null;
            }
        }
        //inPlayerFlag切り替え
        if (kb_B.EnterCheck(ballingFlag && defenseDelay <= 0f))
        {
            inPlayerFlag = false;
        }


        //プレイヤー制御
        if (EnterInPlayerFlag)
        {
            playerBall.gameObject.SetActive(false);
        }
        if (ExitInPlayerFlag)
        {
            playerBall.Warp();
            playerBall.SetVelocity(rb.velocity);
            playerBall.gameObject.SetActive(true);
            playerBall.transform.position = rb.transform.position;
        }


        //defense状態と通常状態の分岐

        rb.freezeRotation = false;
        rb.velocity       = Vector3.ClampMagnitude(rb.velocity, 15f);
        if (ballingFlag)
        {
            isWarping = false;

            rb.drag        = Mathf.Lerp(rb.drag, 0f, TimeSpeed);
            rb.angularDrag = Mathf.Lerp(rb.angularDrag, 0.3f, TimeSpeed);


            transform.localScale = Vector3.Lerp(transform.localScale, Vector3.one * 0.5f, TimeSpeed);
            gameObject.layer     = LayerMask.NameToLayer("SD");

            if (defenseDelay > 0f)
            {
                //コックピットと共鳴中だったら、玉になる瞬間に引き寄せられる
                if (currentPit)
                {
                    transform.SetPositionAndRotation(Vector3.Lerp(transform.position, currentPit.transform.position + (Vector3.up * 0.5f), Time.deltaTime * 7f), transform.rotation);
                }

                rb.useGravity = false;
                rb.velocity   = Vector3.zero;
                Look(false);

                dilay = 0.5f;
            }
            else
            {
                rb.useGravity = true;

                if (dilay > 0f)
                {
                    dilay -= Time.deltaTime;
                    dilay  = Mathf.Clamp(dilay, 0f, 1f);
                }
                else
                {
                    DefenseMode();
                }
            }
        }
        else
        {
            //ボールから解除される時,爆発する
            //if (ballingFlag_prev)
            //{
            //    Bom.transform.position = transform.position;
            //    Bom.SetActive(true);
            //    Debug.Log("B!!!");
            //    //中身がいれば、垂直にジャンプさせる
            //    if(inPlayerFlag_prev)
            //    {
            //        Vector3 vel = rb.velocity;
            //        vel.y = 15f;
            //        playerBall.ballRB.velocity = vel;
            //    }
            //}

            rb.drag        = Mathf.Lerp(rb.drag, defaultDrag, TimeSpeed);
            rb.angularDrag = Mathf.Lerp(rb.angularDrag, defaultAngularDrag, TimeSpeed);

            transform.localScale = Vector3.Lerp(transform.localScale, Vector3.one * 0.5f, TimeSpeed);
            rb.useGravity        = false;
            DefaultMode();
        }


        prevCollisionFlag = false;

        PitPoint.UD();
    }