コード例 #1
0
    public override Vector3 ActivateCameraObserver(ref bool notUseCameraLookAt, ref Vector3 lookAtPosition)
    {
        Vector3 lookVec = status.GetFootCenter().position - status.GetPlayer().position;

        if (!status.GetIsInMotion())
        {
            lookVec.y = 0;
        }
        lookVec += Camera.main.transform.position;

        notUseCameraLookAt = true;
        lookAtPosition     = lookVec;

        float   nowAngle = Camera.main.transform.rotation.eulerAngles.y;
        Vector3 position;

        position.z = distanceFromCenter * Mathf.Cos(nowAngle * Mathf.Deg2Rad);
        position.x = distanceFromCenter * Mathf.Sin(nowAngle * Mathf.Deg2Rad);

        if (!status.GetIsInMotion())
        {
            position.y = height;
        }
        else
        {
            position.y = status.GetPlayer().position.y + height;
        }

        return(status.GetFootCenter().position + position);
    }
コード例 #2
0
    private void SetMovePosition()
    {
        //ワールド座標のz軸が0度、時計回りが正、
        //Inspectorでは負でもプログラムでは正になる(-90→270)
        float[] wantedAngle = new float[4];
        wantedAngle[0] = status.GetFootCenter().rotation.eulerAngles.y - 45f;
        wantedAngle[1] = status.GetFootCenter().rotation.eulerAngles.y + 45f;
        wantedAngle[2] = status.GetFootCenter().rotation.eulerAngles.y - 90f;
        wantedAngle[3] = status.GetFootCenter().rotation.eulerAngles.y + 90f;

        //AngleからPositionに変換する
        //外積で正負を求める回る方向を決めればいい
        //(真逆の2方向のどちらがいいかを2択で決める場合は外積を使えばいい)
        Vector3[] wantedPos = new Vector3[4];
        for (int i = 0; i < wantedAngle.Length; i++)
        {
            wantedPos[i]    = status.GetFootCenter().position;
            wantedPos[i].z += status.GetDistanceFromCenter() * Mathf.Cos(wantedAngle[i] * Mathf.Deg2Rad);
            wantedPos[i].x += status.GetDistanceFromCenter() * Mathf.Sin(wantedAngle[i] * Mathf.Deg2Rad);
            wantedPos[i]    = Vector3.Lerp(status.GetFoots()[i].position, wantedPos[i], Time.fixedDeltaTime);
            movePosition[i] = wantedPos[i];
            Vector3 bodyPos = status.GetFootCenter().position;
            bodyPos.y += 3;
            status.GetBody().position = bodyPos;
        }
    }
コード例 #3
0
    public void SetInitLookAt()
    {
        Vector3[]   vecfromCenter = new Vector3[4];
        Transform[] foot          = status.GetFoots();
        Vector3[]   lookAtPos     = new Vector3[4];
        for (int i = 0; i < vecfromCenter.Length; i++)
        {
            vecfromCenter[i]   = foot[i].position - status.GetFootCenter().position;
            vecfromCenter[i].y = 0;
            lookAtPos[i]       = foot[i].position + vecfromCenter[i];
        }

        lookAtPos.CopyTo(lookAtPosition, 0);
    }