Jump to content
Unity Insider Forum

Simple Game Metrics


AgentCodeMonk

Recommended Posts

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...