TP Unity3D - Scripts
1. Les fonctions de base
Awake Start Update
Créer un script C# dans un dossier scripts
using UnityEngine;
public class test : MonoBehaviour {
void Awake(){
print("awake");
}
void Start() {
print("start");
}
void Update() {
print("update");
}
void OnApplicationQuit(){
print("Exit");
}
}
Appliquer ce script à n’importe quel GameObject
2. Rotation des cubes
Créer un script rotator
using UnityEngine;
public class rotator : MonoBehaviour {
// Update is called once per frame
void Update () {
transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);
}
}
Et l’appliquer au cube
Si le cube tourne:
- Dupliquer le cube
- Les répartir sur le terrain
Les quaternions
Note sur les rotations
Les angles de la rotation ne sont pas stockés en vecteur3 mais en quaternion avec i, j, k
tels que \(i^{2}=j^{2}=k^{2}=ijk=-1\)
On note un quaternion \(q= a + bi + cj + dk\) avec \(a, b, c, d \in \mathbb{R}\)
Avantages:
- stockage similaire
- calcul d’interpolation entre orientations
- évite le blocage de cardan
(lorsque 2 axes de rotation ont la même direction)
3. Tirer
- créer un point de départ
- créer un projectile
- écrire un script pour:
- lancer le projectile
- depuis le point de départ
- avec l’orientation de la caméra
Déclaration de variables:
using UnityEngine;
public class shoot : MonoBehaviour {
private Transform m_cam;
public float puissance;
public GameObject prefab_boule;
public Transform position_init;
On récupère l’orientation de la caméra (son Transform)
using UnityEngine;
public class shoot : MonoBehaviour {
private Transform m_cam;
public float puissance;
public GameObject prefab_boule;
public Transform position_init;
void Start(){
m_cam = Camera.main.transform;
}
Si click souris alors créer balle
using UnityEngine;
public class shoot : MonoBehaviour {
private Transform m_cam;
public float puissance;
public GameObject prefab_boule;
public Transform position_init;
void Start(){
m_cam = Camera.main.transform;
}
void Update(){
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Fire();
}
}
void Fire()
{
balle = Instantiate(prefab_boule, position_init.position, m_cam.rotation);
Il faut donc rajouter cette balle aux variables déclarées.
using UnityEngine;
public class shoot : MonoBehaviour {
private Transform m_cam;
public float puissance;
public GameObject prefab_boule;
public Transform position_init;
private GameObject balle;
Et on peut finir le script en lançant la balle
using UnityEngine;
public class shoot : MonoBehaviour {
private Transform m_cam;
public float puissance;
public GameObject prefab_boule;
public Transform position_init;
private GameObject balle;
void Start(){
m_cam = Camera.main.transform;
}
void Update(){
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Fire();
}
}
void Fire()
{
balle = Instantiate(prefab_boule, position_init.position, m_cam.rotation);
balle.GetComponent<Rigidbody>().velocity = balle.transform.forward * puissance;
}
}
On peut rajouter la destruction des balles trop vieilles.
using UnityEngine;
public class shoot : MonoBehaviour {
private Transform m_cam;
public float puissance;
public GameObject prefab_boule;
public Transform position_init;
private GameObject balle;
void Start(){
m_cam = Camera.main.transform;
}
void Update(){
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Fire();
}
}
void Fire()
{
balle = Instantiate(prefab_boule, position_init.position, m_cam.rotation);
balle.GetComponent<Rigidbody>().velocity = balle.transform.forward * puissance;
Destroy(balle, 30.0f);
}
}
Mise en place de ce script
et test!
4. Améliorations du script Tirer
Plus on clique longtemps plus ça tire fort
private float puissance;
void Start()
{
puissance = 0;
m_cam = Camera.main.transform;
}
// Update is called once per frame
void Update () {
//var angleTir = cam.transform.rotation;
// rajoute de la puissance et s'arrete à 5
if (Input.GetKey(KeyCode.Mouse0) && puissance < 5)
{
puissance += Time.deltaTime;
}
if (Input.GetKeyUp(KeyCode.Mouse0))
{
Fire();
puissance = 0;
}
}
deck
By matthieuquantin
deck
- 761