Re: Character wrapper - code python

Posté par Bibi09 le 15/8/2019 18:02:04
D'ailleurs, c'est peut-être un petit détail mais pour la partie code, je trouverais plus clair de faire ainsi :

import bge
from mathutils import Vector

cont = bge.logic.getCurrentController()
own = cont.owner

wraper = bge.constraints.getCharacter(own)

direction = own.orientation * Vector((0, 1, 0))

if cont.sensors['Keyboard'].positive:
    speed = 0.1
    wraper.gravity = 9.80
else:
    speed = 0
    if wraper.onGround:
        wraper.gravity = 0
    else:
        wraper.gravity = 9.80
    
wraper.walkDirection = direction * speed


Pourquoi ?
Le calcul est strictement identique. Mais à la lecture du code, on sépare bien deux notions qui ne sont pas liées : la direction et la vitesse. Avec "Vector((0, 0.1, 0))", on mélange les deux valeurs à la fois et c'est pas hyper sexy.

Direction, c'est un vecteur qui nous indique dans quelle direction aller (en orientation locale). On parle uniquement de direction. Donc on extrait uniquement la composante Y du vecteur orientation
(techniquement, il faudrait normaliser le vecteur direction mais ici own.orientation fournit déjà un vecteur normalisé).

Ensuite, on voit que ça va un peu trop vite. On va donc régler la vitesse de déplacement avec une variable speed. On l'applique au vecteur direction. A noter que si cette variable est négative, on "recule", ce qui est plus intuitif qu'un "Vector((0, -0.1, 0))".

Donc on a à la fois la direction et la vitesse de déplacement, mais elles sont découplées pour les rendre claires et intuitives.

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=3&topic_id=49206&post_id=578517