1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Spawner : MonoBehaviour
{
[Header ("Object properties")]
[SerializeField] private float moveSpeed;
[SerializeField] private Material material;
[SerializeField] private GameObject prefabToSpawn;
private GameObject newObject;
private GameObject oldObject;
//public GameObject oldObject;
private Vector3 objectDirection;
Vector3 scale;
float scaleX,scaleY,scaleZ;
void Start()
{
scale = prefabToSpawn.GetComponent<Transform>().localScale;
scaleX=scale.x;
scaleY=scale.y;
scaleZ=scale.z;
}
private void Update ()
{
if (Input.GetKeyDown (KeyCode.I))
{
newObject = CreateNewObject ();
// Cas particulier : on vient de lancer le jeu et il n'y a pas d'ancien objet.
if (oldObject == null)
{
// On crée le nouveau en (0, 0, 0).
newObject.transform.position = Vector3.zero;
}
else
{
// Sinon on le crée à la position de l'ancien.
newObject.transform.position = oldObject.transform.position;
}
// Permute les références des objets et détruit l'ancien.
GameObject tempObject = oldObject;
oldObject = newObject;
newObject = null;
Destroy (tempObject);
// Donne une nouvelle direction à l'objet.
objectDirection = GetRandomNormalizedVector ();
}
// Mouvement de l'objet, avec cas particulier du premier.
if (oldObject != null)
{
oldObject.transform.Translate (objectDirection * moveSpeed * Time.deltaTime);
}
}
private GameObject CreateNewObject ()
{
// Instantiation du prefab.
GameObject go = GameObject.Instantiate (prefabToSpawn, transform);
go.name = "Object - " + Time.frameCount.ToString ("0000");
// Ajoute le material.
go.GetComponent<Renderer> ().material = material;
scaleX=scale.x;
scaleY=scale.y;
scaleZ=scale.z;
go.transform.localScale = new Vector3(scaleX,scaleY,scaleZ);
return go;
}
private Vector3 GetRandomNormalizedVector ()
{
return Random.onUnitSphere;
}
} |
Partager