Je suis en train de créer un jeu où un missile suit un joueur jusqu'à le toucher => BOOM
Le missile Spawn et grâce au script "facesPlayer" il detecte le joueur et oriente sa direction vers ce dernier. Un autre script "EnemySpawner" permet de faire, comme son nom l'indique, spawn des missiles toutes les X secondes. Mais au moment de spawn, le missile n'est pas orienté vers le joueur, il est orienté vers le haut et s'oriente petit à petit vers le joueur seulement après.
J'aimerai qu'au moment de spawner, le missile soit directement orienté vers le joueur.
Pour le moment, pour éluder le problème, le missile au moment de spawner, est interdit de bouger pendant 2 secondes, le temps de s'orienter. Après ces deux secondes, il peut se mouvoir vers son objectif. Cette manipulation est invisible pour le joueur mais moi je le sais
Auriez-vous une solution pour qu'au moment de spawn, le missile soit déjà orienté vers le joueur ?
Script de "EnemySpawner":
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemySpawner : MonoBehaviour
{
public GameObject missilePrefab;
GameObject missileInstance;
float missileRate = 5;
float nextMissile =1;
float spawnDistance = 40f;
Transform player;
// Update is called once per frame
void Update()
{
if (player == null)
{
GameObject go = GameObject.Find("shipPlayer_1");
if (go != null)
{
player = go.transform;
}
}
nextMissile -= Time.deltaTime;
if(nextMissile <=0)
{
nextMissile = missileRate;
missileRate *= 0.9f;
Vector3 offset = Random.onUnitSphere;
offset.z = 0;
offset = offset.normalized * spawnDistance;
missileInstance = (GameObject)Instantiate(missilePrefab, player.position + offset, Quaternion.identity);
missileInstance.name = "Missile_1";
}
}
}
Script de "facesPlayer":
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class facesPlayer : MonoBehaviour
{
float rotationSpeed = 150f;
public float distance;
Transform player;
// Update is called once per frame
void Update()
{
if (player == null)
{
GameObject go = GameObject.Find("shipPlayer_1");
if (go != null)
{
player = go.transform;
}
}
distance = Vector3.Distance(player.position, transform.position);
//At this point, we've either found the player
// or the player doesn't exist right now
if (player == null || distance < 2.5)
{
return; // Try again next frame.
}
//Here, we know for sure we've a player. Turn to face it.
Vector3 dir = player.position - transform.position;
dir.Normalize();
float zAngle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90;
Quaternion desireRot = Quaternion.Euler(0, 0, zAngle);
transform.rotation = Quaternion.RotateTowards(transform.rotation, desireRot, rotationSpeed * Time.deltaTime);
}
}
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class moveForward : MonoBehaviour
{
float maxSpeed = 15f;
float delay = 2f;
// Update is called once per frame
void Update()
{
delay -= 1 * Time.deltaTime;
if (delay <= 0)
{
delay = 0;
Vector3 pos = transform.position;
Vector3 velocity = new Vector3(0, maxSpeed * Time.deltaTime, 0);
pos += transform.rotation * velocity;
transform.position = pos;
}
}
}