Atelier NSI : Unity 3D

Laurent PIERRON (Laurent.Pierron@inria.fr)

April 05, 2023

NSI : Atelier Unity 3D

Objectif

https://tutos-technos.gitlabpages.inria.fr/nsi-unity

Représenter les données d’analyse d’intrusion du Laboratoire de Haute Sécurité (LHS) sous la forme de sphères rebondissantes.

Cahier des charges

  • tentatives d’intrusion en continu format JSON
  • tentative (port, pays origine) représentée par une sphère
    • taille = nombre d’essais
    • couleur = drapeau du pays
  • comportement des sphères
    • apparition dans une boîte
    • rebondissantes
    • groupées par numéro de port
    • disparition temporisée

Unity qu’est-ce ?

Carte d’identité

  • date de naissance : Juin 2005 à Copenhague
  • domicile : San Francisco, Californie
  • employés : 7 703 (2022)
  • chiffre d’affaires : 1,390 milliards $
  • bénéfices : -921 millions $
  • utilisateurs : 2 milliards, dont 1,5 millions créateurs

Environnement Unity 3D

  • moteur de jeu : simulateur temps réel de monde imaginaire en 2D ou 3D
  • multiplateforme (25) : consoles, PC, smartphone, VR/AR
  • écosystème :
    • éditeur de monde : Unity Editor (MacOS, Windows, Linux)
    • gestion de projets : Unity Hub
    • documentation : manuel et interface de programmation API
    • didacticiels et sites communautaires
    • magasin de composants : Assets Store

Rendu graphique

Unity gère le rendu 2D et 3D à travers plusieurs moteurs (URP, HDRP, Build-in)

  • caméras

  • éclairage : lumière, ombre

  • maillages, textures, matières, ombrages

  • effets visuels ( brillance, brouillard, flou, particules, etc.)

  • ciel, etc.

    Manual:Graphics

Lois de la mécanique

Unity gère les lois de la mécanique (physics en anglais) en 2D et 3D :

  • force : gravitation, collision
  • mouvement : vitesse, accélération
  • segments rigides reliés, marionnettes (ragdoll)
  • mouvement des vêtements
  • pas de mécanique des fluides :-()

Manual:PhysicsSection

Jouabilité / Interaction

  • Animation des objets (mouvement, transformations) avec machine à états
  • Interface utilisateur (UI)
  • Déplacement intelligent des personnages (IA)
  • Entrées du joueur (souris, clavier, manettes, écran tactile, accéléromètre, VR/AR contrôleurs,..)
  • Multi-joueur et réseau

Manual:AnimationSection

Mais aussi…

  • Monde 3D : terrain, arbres, ciel
  • Audio (bruit, musique, son directionnel)
  • Vidéos
  • Magasin d’Assets
  • Prefab objets
  • Intégration d’objets 3D d’autres outils (blender, Solidworks, URDF Robotic, …)
  • Système de greffons (plug-ins)

Programmation

  • comportement des objets :
    • composants (Compoent) ajoutés aux objets (GameObject) dans l’éditeur
    • scripts (Scripts) : sous-classe C# de MonoBehaviour
  • moteur de jeu :
    • boucle infinie temporisée (PlayerLoop)
    • envoi évènements à tous les objets actifs de la scène

Manual:ScriptingSection

Manual:ExecutionOrder

Installation du projet

Développement environnement

Prérequis :

  1. Unity Hub : https://unity.com/download
  2. Unity Editor 2021.3.22f1 : installé depuis Unity Hub
  3. Code C# IDE (Visual Studio Code) ou un autre éditeur (Notepad++, etc.) : (Scripting Tools)[https://docs.unity3d.com/Manual/ScriptingToolsIDEs.html]
  4. Lier Unity Editor and visual studio : Edit -> Preference -> External tools -> External Studio Code

Téléchargement du projet

git clone https://gitlab.inria.fr/tutos-technos/nsi-unity.git

ou une release : https://gitlab.inria.fr/tutos-technos/nsi-unity/-/releases

  1. Start Unity Hub
  2. In Projects tab, click the arrow near Open and Add project from disk
  3. Browse to: nsi-unity/LHSVisu
  4. Click Add project
  5. Double click on the project in the list.
  6. Link Unity Editor and Visual Studio : Edit -> Preference -> External tools -> External Studio Code

Ouvrir la scène principale

  1. File -> Open Scene
  2. Select Assets/Scenes/SampleScene.unity

Should looks like

Premiers pas

L’interface utilisateur

Nombreuses vues :

Scene the current scene in 3D
Hierachy The list of GameObject
Project File manager in the project
Inspector Detail of the current selected GameObject
Console, Game, Animations, Animator controler

Un tas de façon pour déplacer, ajouter, supprimer, détacher des vues.

GameObject

  • Tout est un Gameobject (camera, objects, lights, …)
  • Un GameObject peut être parent de plusieurs GameObject
  • Un GameObject contient des Component
  • Un GameObject appartient à une Scene

Regarder la vue Hierarchy

Types de GameObject

3D Object A list of cubes, spheres, plane, text…
Effects particles
Lights Different kind of lights
Audio Audio Sources
Video Video Sources
UI 2D buttons, text, checkboxes, …
Camera A camera !

Exercice: Ajouter un nouveau GameObject capsule, changer taille et position…exécuter

Composants : Component

Tout est dans la vue Inspector d’un GameObject

Vous pouvez ajouter et supprimer des composants, changer l’ordre

Composant Transform

Transform contient la position, taille et rotation

Composant Mesh

Mesh est la définition du maillage (sommets, arêtes et faces) de l’objet

Composant Box collider

Box collider décrit la collison entre les objets

Composant RigidBody

Un RigidBody donne de la masse et de l’attarction à un objet

Exercice: Ajouter un RigidBody à la capsule…et zou!

Scripts

C

…Object oriented, strongly typed…

  • The worst from java
  • The bad stuff from C++
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Hello world!");
    }
}

scripts as components

A script is a Component attached to a GameObject

  • A script is related to this GameObject.
  • A script can access to all Component of this GameObject.
  • A script can access to all GameObject of the Scene.
  • A script can access to all Component of all GameObject.

MonoBehaviour

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[AddComponentMenu("HelloWord")]

public class HelloWord : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("yeah !!!");
    }
    // Update is called once per frame
    void Update()
    {
    }
}

Exercice: Add this script to the capsule…then run

Déclencheurs MonoBehaviour

Beaucoup de propriétés et de déclencheurs

Lets see the doc

Modifier le script pour avoir une message lors d’une collision

Attributs C# utiles pour Unity

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[AddComponentMenu("Attraction")]
[RequireComponent(typeof(Rigidbody))]

public class Attraction : MonoBehaviour
{
    [SerializeField, Tooltip("Attraction factor")]
    public float AttractionFactor = 1;
    [SerializeField, Tooltip("Minimum distance")]
    public float MinDistance = 1;
    [SerializeField, Tooltip("Maximum Force")]
    public float MaxForce = 1;
    public int port = 0;
    // Start is called before the first frame update
    public int count = 0;

Tuto

Sequences de scripts

Les scripts 1/2

Master Get infos from HSL, and lauch Spawn
Spawn Create and throw a Sphere, change its CountryName and PortName
Attraction Compute attractions between spheres and add a force to the sphere
Expire Destroy the sphere after a while

Les scripts 2/2

Bounce Compute the Bounce and add a force to the sphere
FlagMaterial Download the png flag from internet and apply to the sphere’s material.
Fixed Text Set the text right to the camera

EXO #1: Rotation animée de la caméra

  • Script : CameraMove.cs
  • Modification : à chaque moment faire tourner la caméra en filmant le centre de la scène
  • astuces :
    • class Transform : RotateAround, LookAt
    • class Vector3 (https://docs.unity3d.com/ScriptReference/Vector3.html) : zero, up
    • class Time : deltaTime

EXO #2: Ajouter du son au rebondissement

  • Script : Bounce.cs
  • Modification : appliquer un son quand la balle touche une surface
  • aide : * voir AudioSource, PlayOneShot

EXO #1: Afficher le drapeau

  • Script : FlagMaterial.cs
  • Modification : afficher le drapeau du pays sur la sphère
  • aide : * see DownloadHandlerTexture, Renderer, SetTexture, Material, *“_MainTex”*

Conclusion

La seule limite est votre imagination

Une bonne application pour faire d’incroyable simulation !