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;
}
lundi 10 décembre 2012
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.
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.
jeudi 25 octobre 2012
lundi 1 octobre 2012
dimanche 5 août 2012
jeudi 5 avril 2012
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;
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.
mardi 28 février 2012
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.
Les callback (delegate) en C#
C'est assez simple.
On declare un type delegate ainsi (ici le callback aura 2 parametres):
public delegate void CommandCallbackType(int a, float b);
On declare un type delegate ainsi (ici le callback aura 2 parametres):
public delegate void CommandCallbackType(int a, float b);
On a quelque part une fonction (ici statique mais pas obligatoire) de prototype identique.
public static void OnCommand(int a, float b)
{
...traitements...
}
On stocke notre callbak ainsi:
public CommandCallbackType mCallback = new CommandCallbackType(OnCommand);
On peut ensuite appeller le callback de cette maniere:
mCallback (1, 2.5f);
dimanche 19 février 2012
Autres Blogs
Un autre blog qui peut etre interessant:
http://zaxisgames.blogspot.com/
Ou aussi:
http://unitynoobs.blogspot.com/
Ou encore celui la:
http://www.chrisdanielson.com/category/unity/
http://zaxisgames.blogspot.com/
Ou aussi:
http://unitynoobs.blogspot.com/
Ou encore celui la:
http://www.chrisdanielson.com/category/unity/
vendredi 17 février 2012
Lancer plusieurs instances d'Unity en meme temps
Quand on essai d'ouvrir Unity plus d'une fois celui-ci refuse de le faire.
La raison est simple, il ne veut pas que l'on puisse ouvrir plus d'une fois le même projet.
Malheureusement des qu'on lance Unity il essaye d'ouvrir par defaut le dernier projet utilisé.
La solution consiste tout simplement à spécifier à Unity quel projet charger, cela se fait grace aux parametres de ligne de commandes d'Unity.
Sous Windows il faut dupliquer le raccourcit Unity et modifier la commande ainsi:
"C:\Program Files (x86)\Unity\Editor\Unity.exe" -projectPath "D:\Dev\MonProjet"
Pour info, les parametres de ligne de commande d'unity:
http://unity3d.com/support/documentation/Manual/Command%20Line%20Arguments.html
La raison est simple, il ne veut pas que l'on puisse ouvrir plus d'une fois le même projet.
Malheureusement des qu'on lance Unity il essaye d'ouvrir par defaut le dernier projet utilisé.
La solution consiste tout simplement à spécifier à Unity quel projet charger, cela se fait grace aux parametres de ligne de commandes d'Unity.
Sous Windows il faut dupliquer le raccourcit Unity et modifier la commande ainsi:
"C:\Program Files (x86)\Unity\Editor\Unity.exe" -projectPath "D:\Dev\MonProjet"
Pour info, les parametres de ligne de commande d'unity:
http://unity3d.com/support/documentation/Manual/Command%20Line%20Arguments.html
Inscription à :
Articles (Atom)