I. Introduction▲
Cette série explique comment jouer une vidéo dans une scène Unity.
Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.
II. Vidéo▲
Unity - Jouer une vidéo
III. Résumé▲
Dans cette vidéo, vous allez écrire une classe pour contrôler la vidéo. Ajoutez le script suivant à votre objet :
using
System.
Collections;
using
System.
Collections.
Generic;
using
UnityEngine;
using
UnityEngine.
Video;
public
class
WorldSpaceVideo :
MonoBehaviour {
public
Material playButtonMaterial;
public
Material pauseButtonMaterial;
public
Renderer playButtonRenderer;
private
VideoPlayer videoPlayer;
void
Awake
(
)
{
videoPlayer =
GetComponent<
VideoPlayer>
(
);
}
void
Start (
)
{
}
void
Update (
)
{
}
public
void
PlayPause
(
)
{
if
(
videoPlayer.
isPlaying)
{
videoPlayer.
Pause (
);
playButtonRenderer.
material =
playButtonMaterial;
}
else
{
videoPlayer.
Play (
);
SetTotalTimeUI (
);
playButtonRenderer.
material =
pauseButtonMaterial;
}
}
}
Ce script permet de mettre en pause ou de continuer la lecture de la vidéo ainsi que de modifier l'aspect du bouton de lecture.
Pour que le joueur puisse tirer sur les boutons afin de les actionner, vous devez ajouter les scripts suivants :
using
System.
Collections;
using
System.
Collections.
Generic;
using
UnityEngine;
public
abstract
class
ShootableUI :
MonoBehaviour
{
public
WorldSpaceVideo worldSpaceVideo;
public
abstract
void
ShotClick
(
);
}
using
System.
Collections;
using
System.
Collections.
Generic;
using
UnityEngine;
public
class
PlaybuttonControl :
ShootableUI
{
public
override
void
ShotClick (
)
{
worldSpaceVideo.
PlayPause (
);
}
}
Le premier script permet de définir une classe abstraite dont tous les boutons pouvant être actionnés par le joueur devront hériter. Le second script permet d'indiquer que le bouton auquel il est attaché doit appeler la fonction PlayPause() lorsque le joueur tire dessus.
Finalement, il faut ce dernier script permettant de détecter le tir du joueur :
using
UnityEngine;
using
System.
Collections;
using
UnityEngine.
EventSystems;
public
class
RayCastShootComplete :
MonoBehaviour {
public
int
gunDamage =
1
;
// Définit le nombre de points de contact que l'arme retire aux objets touchés
public
float
fireRate =
0
.
25f
;
// Nombre de secondes déterminant le temps entre deux tirs
public
float
weaponRange =
50f
;
// Distance dans l'unité de Unity sur laquelle le joueur peut tirer
public
float
hitForce =
100f
;
// Force à ajouter aux objets physiques touchés
public
Transform gunEnd;
// Référence pointant le bout de l'arme
private
Camera fpsCam;
// Référence à la caméra FPS
private
WaitForSeconds shotDuration =
new
WaitForSeconds
(
0
.
07f
);
// Objet WaitForSeconds utilisé pour la coroutine ShotEffect, déterminant le temps d'apparition de la ligne du laser
private
AudioSource gunAudio;
// Référence à la source audio qui jouera le son de l'arme
private
LineRenderer laserLine;
// Référence au composant LineRenderer servant à afficher le laser
private
float
nextFire;
// Nombre à virgule flottante pour stocker le moment où le joueur pourra tirer à nouveau
void
Start (
)
{
// Récupère la référence du composant LineRenderer
laserLine =
GetComponent<
LineRenderer>(
);
// Récupère la référence du composant AudioSource
gunAudio =
GetComponent<
AudioSource>(
);
// Récupère la référence de la caméra en cherchant dans ce GameObject et ses parents
fpsCam =
GetComponentInParent<
Camera>(
);
}
void
Update (
)
{
// Vérifie si le joueur a appuyé sur le bouton de feu et si le temps entre deux tirs n'est pas trop court
if
(
Input.
GetButtonDown
(
"Fire1"
) &&
Time.
time >
nextFire)
{
// Met à jour le temps auquel le joueur a tiré
nextFire =
Time.
time +
fireRate;
// Démarre la coroutine pour le laser
StartCoroutine (
ShotEffect
(
));
// Crée un vecteur au centre de la caméra
Vector3 rayOrigin =
fpsCam.
ViewportToWorldPoint (
new
Vector3
(
0
.
5f
,
0
.
5f
,
0
.
0f
));
// Déclare un contact pour le lancer de rayon
RaycastHit hit;
// Définit la position d'origine pour l'effet de notre laser au bout de l'arme
laserLine.
SetPosition (
0
,
gunEnd.
position);
// Vérifie si notre lancer de rayon a touché quoi que ce soit
if
(
Physics.
Raycast (
rayOrigin,
fpsCam.
transform.
forward,
out
hit,
weaponRange))
{
// Définit la position de fin de notre laser
laserLine.
SetPosition (
1
,
hit.
point);
// Récupère une référence au script de vie attaché à l'objet touché
ShootableBox health =
hit.
collider.
GetComponent<
ShootableBox>(
);
// Si un tel script est attaché
if
(
health !=
null
)
{
// Appelle la fonction appliquant les dégâts avec la variable gunDamage
health.
Damage (
gunDamage);
}
// Vérifie si l'objet que nous avons touché est un objet physique
if
(
hit.
rigidbody !=
null
)
{
// Applique une force à cet objet, dans la direction du rayon
hit.
rigidbody.
AddForce (-
hit.
normal *
hitForce);
}
ShootableUI shotUI;
shotUI =
hit.
collider.
GetComponent<
ShootableUI>
(
);
if
(
shotUI !=
null
)
{
shotUI.
ShotClick (
);
}
}
else
{
// Si nous n'avons rien touché, définit la fin de la ligne directement à la limite de la portée (weaponRange)
laserLine.
SetPosition (
1
,
rayOrigin +
(
fpsCam.
transform.
forward *
weaponRange));
}
}
}
private
IEnumerator ShotEffect
(
)
{
// Joue l'effet de tir
gunAudio.
Play (
);
// Affiche le laser
laserLine.
enabled =
true
;
// Attend .07 secondes
yield
return
shotDuration;
// Désactive le laser
laserLine.
enabled =
false
;
}
}
IV. Ressources▲
Vous pouvez télécharger les ressources pour ce projet ici.
V. Commenter▲
Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.