jeudi 7 mai 2015

Parser les types d'un Enum

Exemple de parsing des valeurs d'un enum en c#

public enum eLogType
{
Normal,
Warning,
Error,
Good,
Strange
}

private static Dictionary<eLogType,List<Item>> mLogByType = new Dictionary<eLogType,List<Item>>();

....
foreach(eLogType p in eLogType.GetValues(typeof(eLogType)))
{
mLogByType[p] = new List<Item>();
}

foreach(string name in eLogType.GetNames(typeof(eLogType)))
{
Debug.Log(name);
}

//Nombre d'elements
int len = eLogType.GetValues(typeof(eLogType)).Length;
...

vendredi 18 janvier 2013

Logique Binaire (pense bete)

http://www.somacon.com/p125.php


Toggling a bit and leaving all other bits unchanged

x = x ^ mask;
(or shorthand x ^= mask;)
Bits that are set to 1 in the mask will be toggled in x.
Bits that are set to 0 in the mask will be unchanged in x.

Toggling means that if the bit is 1, it is set to 0, and if the bit is 0, it is set to 1.

XOR truth table
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0


Setting a bit to zero and leaving all other bits unchanged

x = x & (~mask);
(or x &= (~mask);)
Bits that are set to 1 in the mask will be set to zero in x.
Bits that are set to 0 in the mask will be unchanged in x.

AND truth table
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1


Setting a bit to one and leaving all other bits unchanged

x = x | mask;
(or x |= mask;)
Bits that are set to 1 in the mask will be set to one in x.
Bits that are set to 0 in the mask will be unchanged in x.

OR truth table
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1

vendredi 21 décembre 2012

Lister tous les component d'un objet


//Lister les components d'un objet
GameObject g = GameObject.Find("myObj");
Component[] objs = g.GetComponents(typeof(Component));
for (int i = 0; i < objs.Length; ++i)
{
Debug.Log(i+"-----"+objs[i]);
}


vendredi 14 décembre 2012

Floor & Object picking


Routine de picking au sol simple et pratique:

static Plane floor = new Plane(Vector3.up, Vector3.zero);
static public bool TouchFloorPick(Vector2 touchPos, out Vector3 hitPoint)
{
float dist = 5000f;
Ray ray = mCam.ScreenPointToRay(new Vector3(touchPos.x, touchPos.y, 0));
float enter = 0.0f;
floor.Raycast(ray, out enter);
if (enter > 0.0f && enter <= dist)
{
hitPoint = ray.GetPoint(enter);
return true;
}
hitPoint = Vector3.zero;
return false;
}




Routine de picking sur object:


static public bool TouchObjectPick(Vector2 touchPos, out RaycastHit hit)
{
RaycastHit[] hits;
float dist = 50000f;

Ray ray = mCam.ScreenPointToRay(new Vector3(touchPos.x, touchPos.y, 0));
hits = Physics.RaycastAll(ray.origin, ray.direction, dist);
if (hits.Length>0)
{
hit = hits[0];
return true;
}
hit = new RaycastHit();
return false;
}

mercredi 5 décembre 2012

Acceder aux Settings iOS d'une application via Unity

On peut sous xCode ajouter des settings à une application qui seront accessibles dans le panel Settings du device.
Ca peut etre un moyen interessant pour permettre à l'utilisateur de configurer ou regler l'application sans prevoir un menu specifique dans celle-ci.

Pour avoir un panneau de Settings associée à l'application:
Sous Xcode "New File..."->"Resource/Settings Bundle"
Ca rajoute un fichier Settings.Bundle dans le projet.
Editer le fichier Root.plist qui s'y trouve.
Rajouter un TextFiled dans la section "Preference Items", donnez lui un identifier (exemple MyVar).
Ensuite dans unity vous pouvez acceder à ce parametre simplement avec les PlayerPrefs ainsi:
PlayerPrefs.GetString("MyVar")

Notez qu'il semble tout de meme qu'il faille aller modifier la valeur de ce textfield sur le device afin que ca soit pris en compte par Unity, mais cela ne pose pas trop de problemes si on utilise une valeur par defaut.

Maintenant il faudrait utiliser le systeme de PostProcessBuildPlayer dans Unity afin que de lui meme il insere ce fichier Settings.Bundle dans le projet xCode lors de la compilation.
Si je me penche la dessus je mettrais le code de ce PostProcessBuildPlayer.

lundi 5 mars 2012

Trouver une methode par son nom (Reflection C#)

Grace à la lib Reflection de .Net il est possible de retrouver une methode par son nom et de l'appeller.

Les lib à utiliser:
using System;
using System.Reflection;

Stocker la classe:
Type maClasse = typeof(MyClass);

Avoir le nom de la classe:
maClasse.Name;

Retrouver toutes les methodes de la classe (ici on ne cherche que les methodes static public):
MethodInfo[] myArrayMethodInfo = maClasse.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
for (int i=0; i< myArrayMethodInfo.Length; i++)
Debug.Log(""+myArrayMethodInfo[i].Name);

Retrouver une methode par son nom et l'executer (ici la fonction est censée renvoyer une string):
MethodInfo method = maClasse.GetMethod("GetName");
if (method!=null) Debug.Log(method.Invoke(null, null).ToString());

Retrouver le nom de la fonction en cours d'execution:
object method = System.Reflection.MethodBase.GetCurrentMethod();
Debug.Log(method.ToString());


On peut faire pas mal d'autres choses tres interessantes avec cette lib.



lundi 20 février 2012

Comprendre les ratios iPhone/iPad

C'est un peu hors sujet, mais voici juste un petit schéma pour comprendre la problématique des ratios entre iPhone et iPad lorsqu'on souhaite designer une UI compatible avec ces 2 devices.

Dans le 1er cas on design l'UI au format iPad (1024*768) et on l'adapte ensuite à l'iphone.
Dans le 2eme cas on design l'UI au format iPhone (960*640) et on l'adapte ensuite à l'ipad.