Pagine    Articoli    Prodotti    Forum    Cerca  
Nickname

Password


Non sei registrato?
Registrati a GPI qui!

Puoi anche attivare un vecchio utente GPI e chiedere una nuova password.
I Team

Mappa Team
I nostri utenti

Mappa Utenti

   ScrapSpace

Pubblicato da Dario Oliveri il 2013-11-30 13:36:15
Categoria: blog personale
Tags: Unity, Lab

Pagina per tutto quello che non sta in altre pagine :)



Time layers indipendenti
2014-05-29 12:58:48

Per avere varie "temporizzazioni" indipendenti ho provato a pensare un po ed è uscito questo:

 

using UnityEngine;
using System.Collections;
using System.Diagnostics;

// You have to istantiate this class in someway..

public class TimeLayers : MonoBehaviour {
	
	Stopwatch    timer;
	float        deltaMilliSec = 0 ;
	public static float resolution  { get; private set; } //milliseconds
	
	//time scales
	public static float userTimeScale { get; private set; } //always 1
	public static float cutsceneTimeScale { get; set; }
	public static float menuTimeScale { get; set; }
	
	public static float gameTimeScale //physics and gameplay
	{
		get {
			return Time.timeScale;
		}
		set {
			Time.timeScale = value;
		}
	}
	
	//delta times (seconds)
	public static float userDeltaTime {get; private set;}
	public static float cutsceneDeltaTime {get; private set;}
	public static float menuDeltaTime {get; private set;}
	public static float gameDeltaTime
	{
		get{
			return Time.deltaTime;
		}
		private set {
			
		}
	}
	
	void Awake() {
		Application.targetFrameRate = 24;
		QualitySettings.vSyncCount = 1;
		timer = new Stopwatch();
		resolution = 1000.0f/(float)(Stopwatch.Frequency);
		userTimeScale = 1;
		cutsceneTimeScale = 1;
		gameTimeScale = 1;
		menuTimeScale = 1;
		enabled = true;
		UpdateDeltaTimes();
		
		if(resolution>16.0f)
			UnityEngine.Debug.Log ("TimeLayers resolution is greater than maximum admitted for 60 fps");
		//!--
		DontDestroyOnLoad(this); //You may not want this, in that case comment.
	}
	
	void Start () {
		timer.Start();
		StartCoroutine("deltaUpdate");
	}
	
	void OnLevelWasLoaded(int i ){
		timer.Reset();
		timer.Start();
		PollTime();
		UpdateDeltaTimes();
	}
	
	IEnumerator deltaUpdate(){
		while(true){
			PollTime();
			UpdateDeltaTimes();
			//UnityEngine.Debug.Log ("timeUpdated");
			yield return null;
		}
	}
	
	void PollTime(){
		timer.Stop ();
		deltaMilliSec = (float)(timer.ElapsedMilliseconds)/1000.0f;
		timer.Reset ();
		timer.Start();
	}
	
	void OnDestroy(){
		StopCoroutine("deltaUpdate");
	}
	
	void UpdateDeltaTimes(){
		userDeltaTime     = deltaMilliSec; //always scale by 1
		cutsceneDeltaTime = deltaMilliSec * cutsceneTimeScale;
		menuDeltaTime     = deltaMilliSec * menuTimeScale;
		//gameDeltaTime     = deltaMilliSec * gameTimeScale; // KEEP COMMENTED (for documentation only)
	}
}

 

 

 

Non è una soluzione generica, ma potrebbe funzionare per i più :D.

 

Ci sono "4 linee temporali indipendenti" (cutscenes, game, menu, user), ognuna con il proprio "timeScale", tranne la linea temporale "user" (che non è alterabile in nessuno modo).

Utilizzabile ad esempio per mettere in pausa il gioco mentre si mostra il menu o un intermezzo animato.


Screen Size errato u.u
2014-05-20 20:40:05

Stavo cercando di far un box collider con le stesse dimensioni della camera, quando mi sono accorto che i parametri "Screen.Height" e "Screen.Width" dall'editor mode sono sbagliati.

 

Sappiatelo!

 

E di conseguenza anche lo screen ratio (cam.aspect) è sbagliato.

 

In grassetto trovate la misurazione effettuata a "manina" con paint, nel debug log, invece c'è il valore "secondo unity".

 

 


Procedural mesh con Unity
2014-04-01 07:27:15

sembra che il modo corretto di modificare/creare una mesh a runtime, sia questo:

 

MeshFilter meshFilter = GetComponent();
if (meshFilter==null){
	Debug.LogError("MeshFilter not found!");
	return;
}

Mesh mesh = meshFilter.sharedMesh;
if (mesh == null){
	meshFilter.mesh = new Mesh();
	mesh = meshFilter.sharedMesh;
}
mesh.Clear();
mesh.vertices = //...
mesh.triangles = //...
//...
mesh.RecalculateBounds();
mesh.RecalculateNormals();

 


Epsilon di unity sbagliato
2014-03-27 16:40:34

Unity, epsilon non è quello:
http://docs.unity3d.com/Documentation/ScriptReference/Mathf.Epsilon.html

non usate l'epsilon di unity :D, la funzione Approximately ritornerà sempre "a==b" infatti. Sarebbe solo uno spreco di risorse farla usando l'epsilon.

Quel valore li, altamente anomalo è il "smallest positive float".

Il vero valore di Epsilon è 1/(2^23) (ben più grande e vale normalmente  1.2e-7 oovvero: 0.00000011920928955078125 anche se può cambiare a seconda del computer è il più piccolo numero che può essere sommato a 1. ).

Che si sono fumati? O_O


GoScurry tales
2014-01-15 13:37:35

 

 

GoScurry tales

 

 

Starring:

 

Sebastiano Mandalà (as Self)

Daniele Giardini (as Pilot)

Luca Eberhart (as 2nd Pilot)

 

Basato su GoScurry

ispiratami da Luca e Daniele


Campagne crowfunding

Just One Line
Siamo presenti su

     
Copyright ©2016 - Manifesto - Privacy - Termini di Servizio - Community - Collaboratori - Contattaci