Chopper un objet et le porter/projeter (js)

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
vegetalain
Messages : 89
Inscription : 15 Août 2010 17:18
Localisation : la ferté-milon
Contact :

Chopper un objet et le porter/projeter (js)

Message par vegetalain » 19 Juin 2015 10:35

Bonjour, alors voilà j'ai un souci avec script (pris je ne sais plus où mais y'a un bail, dsl), destiné à pouvoir porter des objects. On porte le truc avec un click de souris, on le déplace et :
- si on relâche la souris simplement l'objet est déposé
- si on relâche la souris et que la barre d'espace est appuyée, l'objet est projeté.

Ca : ça va "encore"... mais y'a deux soucis :

- ça ne fonctionne que sur l'axe horizontal, quand je "lève la tête" l'objet ne suit pas verticalement. Même contrainte à la projection...
- ça ne fonctionne que sur les primitives d'Unity, dès que je teste sur un mesh issue de blender c'est bien moins efficace. En fait ça fonctionne mais purée il faut chercher le "point d'accroche" pour prendre le mesh et même après ça semble... "pivoter"... parfois.

J'ai juste rajouté la condition pour la projection de l'objet à la fin du script (fièreté personnelle, nanan on ne rit pas :lol: ), mais entant que graphiste (le code j'y touche jamais en général), je n'arrive pas "tout seul" à résoudre ces soucis ; je cherche, mais si de vrais codeurs pouvaient m'aider ça serait top x)

Merci de vos conseils.

Voici le script ; il est à glisser déposer sur le joueur...

Code : Tout sélectionner

#pragma strict
private var hittedRigidbody:Rigidbody;
private var hit:RaycastHit; 
private var distanceToGun:float=2; 
private var catchedObject:boolean=false;
//------------------------------------------------------------------------------------------
function Start () { 
	ignoreCollider();
	Cursor.visible=false; 
}
//------------------------------------------------------------------------------------------
function ignoreCollider(){
var cols:Collider[]=GameObject.FindGameObjectWithTag("Player").GetComponents.<Collider>();
for (var C:Collider in cols){
	Physics.IgnoreCollision(C,GetComponent.<Collider>());//---Le moteur physique ignore les colliders
	}
}
//------------------------------------------------------------------------------------------
function FixedUpdate () {//---------Boucle infinie
	Screen.fullScreen = true;
	Screen.lockCursor = true;
	if (Input.GetKey(KeyCode.Mouse0)){//----Si on appuie sur la barre d�espace
    castRay();
	}else{//---Sinon ben... :D
if (hittedRigidbody!=null){//----Si hittedRigidbody existe
releaseObject();
		}
	}
}
//------------------------------------------------------------------------------------------
function castRay(){//------Function envoyant un rayon
var direction:Vector3;//----variable de direction
if (hittedRigidbody==null){
	direction=transform.TransformDirection(Vector3.forward);
if (Physics.Raycast(transform.position,direction,hit,3)){//le chiffre est la portee du rayon
	    if (hit.rigidbody && hittedRigidbody==null){
		    	hittedRigidbody=hit.rigidbody;
			hittedRigidbody.useGravity=false;
		    }
		}
	} else//----sinon
	if (hittedRigidbody!=null){
	    var distance:float=Vector3.Distance(hittedRigidbody.transform.position,transform.position);
		direction=transform.TransformDirection(Vector3.forward);
		var myRay:Ray=new Ray(transform.position,direction);
		var _pointVector:Vector3=myRay.GetPoint(distanceToGun);	
		moveObject(hittedRigidbody,_pointVector);
		if (distance<=distanceToGun+1){
		catchedObject=true;
		}
	}
}
//------------------------------------------------------------------------------------------
function moveObject(_rigidbody:Rigidbody,_vector:Vector3){
var finalVector:Vector3=(_vector-_rigidbody.transform.position);
_rigidbody.transform.Translate(finalVector*Time.deltaTime*10,Space.World);
}
//------------------------------------------------------------------------------------------
function releaseObject(){
var direction:Vector3=transform.TransformDirection(Vector3.forward);
	if (Input.GetKey(KeyCode.Space)){
		if(catchedObject)hittedRigidbody.AddForce(1000*direction);
		hittedRigidbody.useGravity=true;
		hittedRigidbody=null;
		catchedObject=false;
	} else {
		if(catchedObject)hittedRigidbody.AddForce(10*direction);
		hittedRigidbody.useGravity=true;
		hittedRigidbody=null;
		catchedObject=false;
	}
}
//------------------------------------------------------------------------------------------
l'absence de plumes, rend libre

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Chopper un objet et le porter/projeter (js)

Message par boubouk50 » 19 Juin 2015 10:55

Je remplacerai

Code : Tout sélectionner

direction=transform.TransformDirection(Vector3.forward);
par

Code : Tout sélectionner

direction=camera.main.transform.TransformDirection(Vector3.forward);
Pour avoir le bon vecteur de lancer, puisque la direction à appliquer est celle de la camera et pas du joueur. (Attention, il y a plusieurs occurrences de ce bout de code, il faut tout remplacer) et il faut que ta camera soit taguée MainCamera.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: Chopper un objet et le porter/projeter (js)

Message par LudlowFx » 19 Juin 2015 17:57

Sujet déplacé, merci de faire attention dans quelle catégorie vous postez !!!! Lire la Nétiquette des Forums !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

vegetalain
Messages : 89
Inscription : 15 Août 2010 17:18
Localisation : la ferté-milon
Contact :

Re: Chopper un objet et le porter/projeter (js)

Message par vegetalain » 19 Juin 2015 19:42

Alors désolé de m'être gourré d'endroit pour mon poste :roll: je ferai plus gaffe la prochaine fois.

Et Merci boubouk50 !!!! La modif' fonctionne et en plus ça semble avoir amélioré la prise que j'ai, sur mon mesh test issu de blender... donc c'est tip top nickel :mrgreen:

Bonne soirée à tout le monde !!
l'absence de plumes, rend libre

Verrouillé

Revenir vers « (Js) Javascript »