コード例 #1
0
    public PlayerLagCompensationSnapshot InterpolateLagCompensationSnapshots(
        PlayerLagCompensationSnapshot snapshot1, PlayerLagCompensationSnapshot snapshot2, float rewoundTime
        )
    {
        var interpolationPercent = (rewoundTime - snapshot1.Time) / (snapshot2.Time - snapshot1.Time);

        return(new PlayerLagCompensationSnapshot
        {
            Time = Mathf.Lerp(snapshot1.Time, snapshot2.Time, interpolationPercent),
            Position = Vector3.Lerp(snapshot1.Position, snapshot2.Position, interpolationPercent),
            LookDirAngles = Vector2.Lerp(
                snapshot1.LookDirAngles, snapshot2.LookDirAngles, interpolationPercent
                )
        });
    }
コード例 #2
0
    public void ApplyLagCompensationSnapshot(
        PlayerObjectComponent playerObjectComponent, PlayerLagCompensationSnapshot snapshot
        )
    {
        playerObjectComponent.transform.position = snapshot.Position;
        ApplyLookDirAnglesToPlayer(playerObjectComponent, snapshot.LookDirAngles);

        if (OsFps.ShowLagCompensationOnServer)
        {
            var tmpCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            tmpCube.transform.position    = snapshot.Position + (2 * new float3(0, 1, 0));
            tmpCube.transform.localScale  = 0.25f * Vector3.one;
            tmpCube.transform.eulerAngles = new Vector3(snapshot.LookDirAngles.x, snapshot.LookDirAngles.y);

            Object.DestroyImmediate(tmpCube.GetComponent <BoxCollider>());
            Object.Destroy(tmpCube, 2);
        }
    }