Tu peux modifier le pivot avant de redimensionner dans ton script, et le remettre à sa position d'origine ensuite.
https://docs.unity3d.com/ScriptReference/Sprite-pivot.html
Merci ThetaTauTau, ca fonctionne !
J'ai une question à propos des variables selon qu'elles sont private ou public. J'ai l'impression de rencontrer un comportement que je ne comprends pas.
Exemple : j'ai une sprite avec laquelle on peut interagir avec la souris. Dans le script attaché à cette sprite, j'ai une variable de type bool appelée 'interactive", que j'utilise pour activer ou désactiver les réactions de cette sprite à la souris(dans les fonctions "OnMouseEnter", je teste avec un "if(interactive)". Pour le moment, aucun élément extérieur ne modifie cette variable. Ce que je ne comprends pas, c'est que selon que cette sprite soit private ou public, elle se comporte de manière différente. En clair, quand la variable "interactive" est en private, tout fonctionne, mais dès que je la mets en public, plus rien ne fonctionne, comme si la variable attendait un message provenant de l'extérieur du script du seul fait qu'elle est en public. J'espère avoir été assez clair. Quelqu'un peut m'aider à comprendre ? Merci.
Bonjour, avant tout je voudrais dire que je suis débutant.
Alors enfaite j'ai fait un script mais il y a un erreur et je peine à trouver la quelle :
https://pastebin.com/ik7QFJYM
Ça serait sympa si quelqu’un pouvait m'aider, Merci.
@Sliman : Les attributs publiques sont modifiables dans l'inspecteur (inspecteur par défaut), les valeurs rentrées dans l'inspecteur "écrasent" celle du script. Du coup vérifie dans l'inspecteur que tu as bien les bonnes valeurs.
Sinon je ne vois pas trop d'où ça peut venir.
@Zenden : quand tu demandes de l'aide pour une erreur, ça serait bien de poster le message d'erreur.
Bonjour j'aurais besoin d’explications pour déplacer un rigidbody, je trouves quelques trucs sur internet mais rien de très compréhensible la plupart étant en anglais et/ou très mal expliqué.
Ce que je voudrais faire c'est faire pivoter une capsule sur l'axe y avec la fonction input.getaxis("Horizontal"),la faire sauter et la faire avancer reculer. Voila j'espères avoir été assez clair merci de votre aide.
float i = Input.GetAxis("Horizontal");
Cette ligne te permet de capturer la valeur de l'axe Horizontal, comprise entre -1 et 1. A 0 pas de mouvement, à -0.5 le bouton de gauche est un petit peu déclenché (surtout valable pour les manettes).
GetComponent<Rigidbody>().AddForce(new Vector3(i,0,0));
Cette ligne te permet d'ajouter de la force à l'objet courant (qui doit avoir un RigidBody (et pas 2D)) sur l'axe x avec la valeur i.
using UnityEngine;
public class tmp : MonoBehaviour
{
private void Update()
{
float i = Input.GetAxis("Horizontal");
GetComponent<Rigidbody>().AddForce(new Vector3(i,0,0));
}
}
Il y a une vidéo débutant qui peut t'intéresser :
https://www.youtube.com/watch?v=Au8oX5pu5u4
Merci beaucoup pour le lien et pour ton code c'est sympa de ta part je testes ça tout à l'heure
Bonjour,
A noter toutefois, que même si le code donné par TheRealMarco semble fonctionner dans sa logique, il est nécessaire de l'écrire différemment.
Un GetComponent<XXX>() est très couteux en temps machine, il est préférable et recommandé dans le cas présent de mettre en cache sa référence.
Modifier un RigidBody hors du cadre d'un FixedUpdate ou d'un évènement de type collision, désynchronise complètement le traitement de la physique.
Un code plus propre et exempts de ces anomalies devrait être plutôt :
using UnityEngine;
public class tmp : MonoBehaviour
{
private Rigidbody _rb;
private void Awake()
{
_rb = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
float i = Input.GetAxis("Horizontal");
if ( i != 0f)
_rb.AddForce(new Vector3(i,0,0));
}
}
Bonne continuation.
Salut j'ai un autre problème, mais cette fois pas de script j'ai crée un fps et un script qui permet de tiré j'ai aussi ajouter un model 3D de balles sauf que sa les tire dans le mauvais sens:
j'ai essayer de crée une prefab dans le bon sens mais sa ne marche toujours pas et tire la balle a l'horizontal vous avez une idée ?
Bonjour,
Je travaille sur un script de génération procédurale de carte du monde.
Je précise que comme terrain j'utilise des meshes, et non des terrain unity.
J'ai un petit souci pour placer des éléments à la surface de ces meshes. J'utilise un RayCast pour déterminer leur position, ce qui fonctionne correctement une première fois. Mais ensuite quand je génère une autre carte je me retrouve avec des arbres qui volent au dessus du terrain.
Je pense que cela viens du fait que le moteur physique d'unity n'a pas fait la mise à jour correctement et utilise encore les mesh de l'ancienne carte, alors qu'ils ont été détruits (ils sont bien détruits avant les raycast, même si les deux sont fait lors de la même frame).
Cela dit je n'ai pas trouvé comment corriger ça.
Si quelqu'un a une idée, merci.
j'ai essayer de crée une prefab dans le bon sens mais sa ne marche toujours pas et tire la balle a l'horizontal vous avez une idée ?
Si tu assigne une direction au prefab lorsque la balle est tirée, ça va écraser la position que tu paramètre à la main dans tous les cas. Éventuellement, tu peux parenter la balle à un GameObject vide et l'orienter comme tu veux, en tant qu'enfant.
Maintenant si je puis me permettre une petite remarque sur un détail, juste, dans la science des armes à feu, la douille ne part pas avec la balle lorsqu'on tire.
Le 25 mai 2017 à 21:27:04 blachscholes56 a écrit :
j'ai essayer de crée une prefab dans le bon sens mais sa ne marche toujours pas et tire la balle a l'horizontal vous avez une idée ?
Si tu assigne une direction au prefab lorsque la balle est tirée, ça va écraser la position que tu paramètre à la main dans tous les cas. Éventuellement, tu peux parenter la balle à un GameObject vide et l'orienter comme tu veux, en tant qu'enfant.
Maintenant si je puis me permettre une petite remarque sur un détail, juste, dans la science des armes à feu, la douille ne part pas avec la balle lorsqu'on tire.
Merci ca marche, et ou je sais que la douille ne part pas avec j'ai juste pas encore écrit le script et l'animation pour que le douille parte, sinon j'ai un autre problème le script pour afficher le nombre de munition n’affiche plus rien (mais il fonctionne quand même ) j'ai rien modifier avant il fonctionnais et quand je l'utilise sur un autre projet il fonctionne très bien.tu a une idée ?
@ThetaTauTau,
Sans ton code, il est difficile de valider ta logique de génération...
Peut être en utilisant un layer de collision distinct sur ton terrain, cela résoudra ton anomalie, mais même si cela fonctionne, le problème vient forcément de la logique de ton code.
A+
Merci UnityCoder.
J'ai mis un petit délai de 0.1 secondes entre la génération des mesh de terrain et le placement des arbres, ce qui résout le problème. C'est un peu du bricolage mais de toute façon ce n'est que temporaire car je vais probablement retirer les raycast plus tard, vu qu'ils bouffent pas mal de perfs et que vu la façon dont mes mesh sont générés, je doit pouvoir déterminer dans quel triangle "tombe" mon arbre, puis retrouver les vertices correspondantes, sans passer par le moteur physique.
@ThetaTauTau,
Ha oui effectivement, je comprends le problème que tu as rencontré. Enfin, je pense....
Tout depends de la séquence de la génération des positions des vertexs de ton terrain et celle de son collider de maille.
Sans avoir fait de tests réels, je pense que Unity réalise le collider de maille de façon asynchrone quand on ajoute à un GameObject ce type de composant.
Peut être la solution élégante serait de façon interne générer soit même ce collider une fois le terrain modelé. C'est simple c'est la même structure vertex que ton terrain modelé.
Autre chose à souligner...
J'ai remarqué sur ton screen donné que certains cubes se chevauches. Peut être un SphereCast tenant compte du bound de ton mesh arbre serait plus judicieux dans ton test d'espace disponible.
Autrement ta map donnée a l'air plus que sympa et montre de ta part une réelle maitrise du truc.
A+
Merci pour ta réponse, j'essayerais de voir si ta solution fonctionne.
J'ai remarqué sur ton screen donné que certains cubes se chevauches.
Corrigé cet aprem, sur le screen je ne vérifiais que les collisions entre les objets d'un même hexagone, maintenant je vérifie aussi avec les objets des hexagones voisins.
Là je m'attaque au shader du terrain.
Bonsoir a tous, c'est juste pour un renseignement .
Lorsque je build en WebGL un petit jeu (tres peu de contenu) , il arrive parfois qu'Unity freeze sur des étapes tels que " Compiling c++ " , ou "Building native binary with IL2CPP" .
J'ai fais beaucoup de recherches google, mais j'ai pas trouvé de solutions , est ce normal que ce "build" soit aussi long?
Lorsque je build pour windows, aucun soucis de vitesse d'ailleurs
Bonjour,
J'ai un soucis avec mon personnage , il reçoit bien des dégâts de la part des ennemies ( squelettes ) mais je n'arrive pas , moi , à leur occasionner des dégâts , voici les scripts qui sont sur les ennemies :
dans le script de l'AI il y'a la fonction attack :
function attack ()
{
if (Time.time > attackTime)
{
GetComponent.<Animation>().Play ("attack");
// animation["attack"].speed = 1;
Target.SendMessage("ApplyDammage", TheDammage);
Debug.Log("The Enemy Has Attacked");
attackTime = Time.time + attackRepeatTime;
}
}
Ensuite , voici le script de la vie des ennemies ainsi que la fonction ApplyDammage :
var Health = 100;
var EnemyName : String;
function ApplyDammage (TheDammage : int)
{
Debug.Log("Test est ce que je fais des degats");
Health -= TheDammage;
if(Health <= 0)
{
GameObject.Find(EnemyName).GetComponent(AIEnemy).enabled = false;
GetComponent.<Animation>().Play ("die");
// animation["die"].speed = 1;
yield WaitForSeconds (30);
Dead();
}
}
function Dead()
{
Destroy (gameObject);
}
Et enfin , le script ou je suis censé faire les degats ;
var TheDammage : int = 50;
private var Distance : float;
var MaxDistance : float = 100;
var DammageDelay : float = 0.6;
function Update()
{
if (Input.GetButtonDown("space"))
{
AttackDammage();
}
}
function AttackDammage()
{
yield WaitForSeconds(DammageDelay);
var hit : RaycastHit;
var ray = Camera.main.ScreenPointToRay(Vector3(Screen.width/2, Screen.height/2, 0));
if (Physics.Raycast (ray, hit))
{
Distance = hit.distance;
if (Distance < MaxDistance)
{
hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
}
}
}
Le debug.Log de la fonction ApplyDammage ne marche pas , donc je suppose qu'il y'a un soucis a ce niveau là , mais je ne comprend pas où ... pouvez vous m'aidez ?
Cordialement,