Créer son jeu pour 0 € ou le blog d'un créateur indépendant fauché.

Créer son jeu pour 0 € ou le blog d'un créateur indépendant fauché.

Par krys64 Blog créé le 21/11/10 Mis à jour le 04/11/15 à 21h48

Pourquoi s'embêter à monter un studio de jeu vidéo à coups de millions et d'équipes surdimensionnées alors qu'il est si simple de tout faire soi-même ?
Vous suivrez sur ce blog les aventures d'un créateur indépendant qui va édifier petit à petit son projet de jeu afin de conquérir le monde.

Ajouter aux favoris
Signaler

Dans la version gratuite d'Unity, vous ne pouvez pas activer le système d'ombres temps réel, mais par contre vous pouvez utiliser un Projector qui permet de projeter une texture sur une surface à la manière d'une lampe torche. L'inconvénient est que le projecteur traverse toutes les surfaces. Pour calculer la distance exacte de la projection, il suffit de calculer la distance située entre le personnage et la surface la plus proche sous ses pieds.

Pour cela, j'utilise le système de raycasting c'est à dire que je projette en permanence un rayon vertical et vers le bas à partir de la position du personnage. Lorsque le rayon touche un obstacle, j'utilise un script qui calcule la distance parcouru et ensuite j'applique ce chiffre au paramètre farClipPlane (en fait la distance de projection) du projecteur.

Je limite ainsi, la projection au premier obstacle et je vous résume le tout en script :

var myTransform:Transform; // personnage principal
var shadow:Projector ; //on variabilise le projector
function Update(){ // on lance une boucle permanente
    if (Physics.Raycast (myTransform.position, - Vector3.up, hit, 100)) // on envoie un rayon de la position du perso vers le bas et à une distance de 100, en cas d'impact, la valeur renvoyée est hit
    {
        //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        var dist = Vector3.Distance(shadow.transform.position, hit.point); // on calcule la distance du perso au point d'impact
        shadow.farClipPlane =dist; // on change la valeur de la propriété farClipPlane  du projecteur
        //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    }
}

Le résultat avant/après :

Ajouter à mes favoris Commenter (2)

Commentaires

beauregard
Signaler
beauregard
C'est futé, même si ça confirme que la 3D complique tout, et on met vachement plus de temps que la 2D, pour arriver au même résultat.
Enimal
Signaler
Enimal
C'est vraiment pas bête, en fait avec un peu de jugeote, on peut contourner toutes les limitations de la version gratuite de unity

Archives