rebondissement d'objets instanciés
Publié : 05 Avr 2023 16:15
bonjour,
Voici 2 scripts appliqués à un même objet(une sphère par exemple)dont survient un léger problème de programmation.
Pour des scripts simples,j'arrive à les faire communiquer entre eux.
Le 1er script instance_3balls.cs instancie 3 objets comme ceci:
Le second script BallBouncer_without_rigidbody3 permet le rebondissement d'un objet obj récupéré dans le 1er script par son nom.
ça ne fonctionne pas ! Pourqoui?
merci de votre aide
Voici 2 scripts appliqués à un même objet(une sphère par exemple)dont survient un léger problème de programmation.
Pour des scripts simples,j'arrive à les faire communiquer entre eux.
Le 1er script instance_3balls.cs instancie 3 objets comme ceci:
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class instance_3balls : MonoBehaviour
{
public GameObject objet1;
List<GameObject> ObjectList;
int i;
public int variable_i;
// Start is called before the first frame update
void Start()
{
ObjectList=new List<GameObject>();
for(i=0;i<3;i++)
{variable_i=i;
ObjectList.Add(objet1);
ObjectList[i] = new GameObject("toto" + i);
ObjectList[i].transform.position=new Vector3(2*i,0,0);
ObjectList[i].AddComponent<BallBouncer_without_rigidbody3>();
ObjectList[i].GetComponent<BallBouncer_without_rigidbody3>().get_i=objet1; //une erreur réside à cette ligne
ObjectList[i].GetComponent<BallBouncer_without_rigidbody3>().initialVelocity=new Vector3(1+i,0,3*(1+i));
ObjectList[i].GetComponent<BallBouncer_without_rigidbody3>().minVelocity=20;
}
}
// Update is called once per frame
void Update()
{
}
}
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BallBouncer_without_rigidbody3: MonoBehaviour
{
public instance_3balls get_i;//get_i doit récupérer la valeur de i du 1er script.Comme i est une variable non
publique,la ligne variable_i=i est nécessaire car vriable_i est publique
GameObject obj;
int p;
public Vector3 initialVelocity;
public float minVelocity;
Vector3 lastFrameVelocity;
void Start()
{ //récupére l'objet ObjectList[i] du 1er script
p=get_i.variable_i;
obj=GameObject.Find("toto"+p);
}
private void OnEnable()
{
lastFrameVelocity=initialVelocity;//initilaVelocity est attribué dans le 1er script
}
void Update()
{
obj.transform.Translate(Time.deltaTime*lastFrameVelocity.x,Time.deltaTime*lastFrameVelocity.y,Time.deltaTime*lastFrameVelocity.z);
}
private void OnCollisionEnter(Collision collision)
{
Bounce(collision.contacts[0].normal);
}
private void Bounce(Vector3 collisionNormal)
{
var direction = Vector3.Reflect(lastFrameVelocity.normalized, collisionNormal);
lastFrameVelocity = direction*minVelocity;
// print("lastFrameVelocity: ("+lastFrameVelocity.x+","+lastFrameVelocity.y+","+lastFrameVelocity.z);
}
}
merci de votre aide