- 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 ), 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;
}
}
//------------------------------------------------------------------------------------------