コード例 #1
0
ファイル: HudBase.cs プロジェクト: mengtest/RewriteFrame
    /// <summary>
    /// 根据刚体速度更新惯性
    /// </summary>
    /// <param name="rect">要微调的UI</param>
    /// <param name="inertia">惯性设置</param>
    private void UpdateInertanceByVelocity(RectTransform rect, InertiaWithHud inertia)
    {
        SpacecraftEntity main = GetMainEntity();

        if (main == null)
        {
            return;
        }

        Transform mainShadow = main.GetSyncTarget();

        if (mainShadow == null)
        {
            return;
        }

        Rigidbody rigidbody = mainShadow.GetComponent <Rigidbody>();

        if (rigidbody == null)
        {
            return;
        }

        SpacecraftMotionComponent mainMotion = main.GetEntityComponent <SpacecraftMotionComponent>();

        if (mainMotion == null)
        {
            return;
        }

        SpacecraftMotionInfo cruiseMotion = mainMotion.GetCruiseModeMotionInfo();

        Vector3 velocity = rigidbody.transform.InverseTransformDirection(rigidbody.velocity);

        float forwardSpeed        = velocity.z;
        float forwardSpeedMax     = cruiseMotion.LineVelocityMax.z;
        float forwardSpeedPercent = Mathf.Clamp01(Mathf.Abs(forwardSpeed) / Mathf.Abs(forwardSpeedMax));

        float upSpeed        = velocity.y;
        float upSpeedMax     = cruiseMotion.LineVelocityMax.y;
        float upSpeedPercent = Mathf.Clamp01(Mathf.Abs(upSpeed) / Mathf.Abs(upSpeedMax));

        float rotationSpeed        = rigidbody.angularVelocity.y * Mathf.Rad2Deg;
        float rotationSpeedMax     = cruiseMotion.AngularVelocityMax.y;
        float rotationSpeedPercent = Mathf.Clamp01(Mathf.Abs(rotationSpeed) / Mathf.Abs(rotationSpeedMax));

        float forwardDir = Vector3.Dot(rigidbody.velocity.normalized, Camera.main.transform.forward);

        float x = rotationSpeedPercent * inertia.OffsetX * (rotationSpeed > 0 ? 1 : -1);
        float y = upSpeedPercent * inertia.OffsetY * (upSpeed > 0 ? 1 : -1);
        float z = forwardSpeedPercent * inertia.OffsetZ * forwardDir;

        //Debug.LogError("----> " +
        //    string.Format("{0:N2}", forwardSpeed) + "/" + forwardSpeedMax + "          " +
        //    string.Format("{0:N2}", upSpeed) + "/" + upSpeedMax + "           " +
        //    string.Format("{0:N2}", rotationSpeed) + "/" + rotationSpeedMax);

        rect.anchoredPosition3D = new Vector3(x, y, z);
    }
コード例 #2
0
ファイル: HudBase.cs プロジェクト: mengtest/RewriteFrame
    /// <summary>
    /// 根据输入状态更新惯性
    /// </summary>
    /// <param name="rect">要微调的UI</param>
    /// <param name="inertia">惯性设置</param>
    private void UpdateInertanceByInput(RectTransform rect, InertiaWithHud inertia)
    {
        Vector3 offset = rect.anchoredPosition3D;

        m_YOffset = m_Ascend ? 1 : (m_Descend ? -1 : 0);

        float x = Mathf.Lerp(offset.x, m_XOffset * inertia.OffsetX, Time.deltaTime);
        float y = Mathf.Lerp(offset.y, m_YOffset * inertia.OffsetY, Time.deltaTime);
        float z = Mathf.Lerp(offset.z, m_ZOffset * inertia.OffsetZ, Time.deltaTime);

        rect.anchoredPosition3D = new Vector3(x, y, z);
    }
コード例 #3
0
ファイル: HudBase.cs プロジェクト: mengtest/RewriteFrame
    /// <summary>
    /// 更新惯性协程
    /// </summary>
    /// <returns>IEnumerator</returns>
    private IEnumerator UpdateInertance()
    {
        RectTransform rect = GetTransform().GetComponent <RectTransform>();

        while (true)
        {
            InertiaWithHud inertia = GetTransform().GetComponent <InertiaWithHud>();
            if (inertia != null && inertia.isActiveAndEnabled)
            {
                if (inertia.mode == InertiaWithHud.InertiaMode.Input)
                {
                    UpdateInertanceByInput(rect, inertia);
                }
                else if (inertia.mode == InertiaWithHud.InertiaMode.Rigbody)
                {
                    UpdateInertanceByVelocity(rect, inertia);
                }
            }

            yield return(new WaitForEndOfFrame());
        }
    }