AgentCodeMonk Geschrieben 11. November 2014 Melden Share Geschrieben 11. November 2014 using System; using System.Collections.Generic; using UnityEngine; using Object = UnityEngine.Object; public class MetricsManager { private static MetricsManager _instance; private GameMetrics _gameMetrics; public static MetricsManager Instance { get { if (_instance != null) return _instance; _instance = new MetricsManager(); return _instance; } } public Dictionary<string, float> Metrics = new Dictionary<string, float>(); public void Reset() { Metrics.Clear(); } public void SetToHighest(string name, float amount) { float value; if (Metrics.TryGetValue(name, out value)) { if (amount > Metrics[name]) Metrics[name] = amount; return; } Metrics.Add(name, amount); } public void Set(string name, float amount) { float value; if (Metrics.TryGetValue(name, out value)) { Metrics[name] = amount; return; } Metrics.Add(name, amount); } public void Add(string name, float amount) { float value; if (Metrics.TryGetValue(name, out value)) { Metrics[name] += amount; return; } Metrics.Add(name, amount); } public string GetPlayedTime() { float value; if (Metrics.TryGetValue("Playtime", out value)) { var t = TimeSpan.FromSeconds(Metrics["Playtime"]); //string timerFormatted = string.Format("{0:D2}h:{1:D2}m:{2:D2}s:{3:D3}ms", t.Hours, t.Minutes, t.Seconds, t.Milliseconds); return string.Format("{0:D2}h:{1:D2}m:{2:D2}s", t.Hours, t.Minutes, t.Seconds); } Metrics.Add("Playtime", 0); return "0"; } } Test UI: void OnGUI() { GUILayout.BeginArea(StatsRect); GUILayout.Box("", GUILayout.Width(200), GUILayout.Height(180)); GUILayout.EndArea(); GUILayout.BeginArea(StatsRect); GUILayout.BeginVertical(); GUILayout.Label("GameMetrics", GUILayout.Width(500)); GUILayout.Space(-10); GUILayout.Label("Playtime " + MetricsManager.Instance.GetPlayedTime(), GUILayout.Width(500)); foreach (var stat in MetricsManager.Instance.Metrics) { if (stat.Key == "Playtime") continue; GUILayout.Space(-10); GUILayout.Label(stat.Key + " " + stat.Value, GUILayout.Width(500)); } GUILayout.EndVertical(); GUILayout.EndArea(); } Verwendung: void Start() { MetricsManager.Instance.Set("Playtime", PlayerPrefs.GetFloat("Playtime")); } void Update() { MetricsManager.Instance.Add("Playtime", Time.deltaTime); } public void ApplyDamage(Character attacker, Character defender, float damage) { // ... if (attacker.IsPlayer) { MetricsManager.Instance.SetToHighest("Highest Damage Dealt", damage); } if (defender.IsPlayer) { MetricsManager.Instance.SetToHighest("Highest Damage Taken", damage); } } void KillPlayer() { MetricsManager.Instance.Add("Deaths", 1); } void BuyItem(Item item, int itemCount) { MetricsManager.Instance.Add("Items Bought", itemCount); } etc... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.