Tutoriel vidéo : https://www.bilibili.com/video/BV12s411g7gU?p=149
Table des matières
la saisie au clavier
Renvoie true lorsque la clé spécifiée par name est maintenue enfoncée par l'utilisateur :
bool result=Input.GetKey(KeyCode.A);
Renvoie vrai pour le cadre lorsque l'utilisateur appuie sur la touche portant le nom spécifié :
bool result=Input. GetKeyDown(KeyCode.A);
Renvoie vrai le cadre où l'utilisateur libère la clé avec le nom donné :
bool result=Input. GetKeyUp(KeyCode.A);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InputDemo: MonoBehaviour
{
public bool isDown;
void Update()
{
isDown = Input.GetMouseButton(0);
//检测按下C键同时按下D键
if (Input.GetKey(KeyCode.C) && Input.GetKey(KeyCode.D))
{
print("同时按下C、D键");
}
}
}
ps: KeyCode est essentiellement une classe d'énumération
Vue
Grâce au bouton droit de la souris, l'objectif de la caméra peut être zoomé
Montez le script suivant sur la caméra principale créée automatiquement dans la scène du modèle (sinon, créez un objet vide avec un composant Caméra) et définissez la propriété Champ de vision du composant Caméra sur 60 comme valeur par défaut lorsqu'il n'y a pas de zoom
1. Zoom unique
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraZoom : MonoBehaviour
{
new private Camera camera;
private bool isZoom = false;
void Start()
{
camera = GetComponent<Camera>();
}
void Update()
{
if (Input.GetMouseButtonDown(1))
{
isZoom = !isZoom;
}
if (isZoom)
{
camera.fieldOfView=Mathf.Lerp(camera.fieldOfView,20,0.1f);
if(Mathf.Abs(camera.fieldOfView-20)<0.1f)
camera.fieldOfView=20;
}
else
{
camera.fieldOfView=Mathf.Lerp(camera.fieldOfView,60,0.1f);
if(Mathf.Abs(camera.fieldOfView-60)<0.1f)
camera.fieldOfView=60;
}
}
}
Non mis à l'échelle :
Après mise à l'échelle :
2. Zoom multiple
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraZoom : MonoBehaviour
{
new private Camera camera;
public float[] zoomLevel;
private int index = 0;
void Start()
{
camera = GetComponent<Camera>();
}
void Update()
{
if (Input.GetMouseButtonDown(1))
{
// index = index < zoomLevel.Length - 1 ? ++index : 0;
index = (++index) % zoomLevel.Length;
}
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoomLevel[index], 0.1f);
if (Mathf.Abs(camera.fieldOfView - zoomLevel[index]) < 0.1f)
camera.fieldOfView = zoomLevel[index];
}
}
Mathf.Lerp(float a, float b, float t) : Interpolation linéaire entre a et b par t
un | point de départ |
b | point final |
t | interpolation entre deux nombres à virgule flottante |
Lorsque t=0, renvoie a ; lorsque t=1, renvoie b ; lorsque t=0,5, renvoie le milieu de a et b
dans le code
index = index < zoomLevel.Length - 1 ? ++index : 0;
Équivalent à
index = (++index) % zoomLevel.Length;
Mais ce dernier utilise l'idée d'une file d'attente circulaire dans la structure de données
réglages des paramètres
Non mis à l'échelle :
Zoom niveau 1 :
2 niveaux de zoom
InputManager
C'est-à-dire le gestionnaire d'entrée, situé dans Édition-->Paramètres du projet-->InputManager. En utilisant le nom de l'axe virtuel pour obtenir l'entrée de la clé personnalisée dans le script, le joueur peut modifier l'axe virtuel en fonction de ses préférences personnelles au démarrage du jeu.
Nom descriptif : Dans l'interface de chargement du jeu, la description détaillée du bouton Suivant
Descriptive Negative Name : Dans l'interface de chargement du jeu, la description détaillée du bouton d'inversion
Bouton négatif : Ce bouton enverra une valeur négative à l'axe
Bouton Positif : Ce bouton envoie une valeur positive à l'axe
Alt Negative Button : Un autre bouton qui envoie des valeurs négatives à l'axe
Alt Positive Button : Un autre bouton qui envoie des valeurs positives à l'axe
ps : Un axe virtuel peut lier jusqu'à quatre touches, si plus de quatre, vous pouvez créer un nouvel axe virtuel avec le même nom pour lier le reste des touches
Gravity : la vitesse à laquelle l'entrée se réinitialise, uniquement pour les touches de type clé/souris
Dead : Toute valeur d'entrée (indépendamment de la valeur positive ou négative) inférieure à cette valeur sera considérée comme 0, utilisée pour le joystick
Sensibilité : Sensibilité, pour la saisie au clavier, plus la valeur est grande, plus le temps de réponse est rapide, et plus la valeur est petite, plus elle est fluide. Pour l'entrée de la souris, la définition de cette valeur sera mise à l'échelle proportionnellement à la distance de déplacement réelle de la souris
Snap : Si ce paramètre est activé, lorsque l'axe reçoit un signal d'entrée inverse, la valeur de l'axe sera mise à 0 immédiatement, sinon la valeur du signal inverse sera appliquée lentement. Uniquement pour la saisie clavier/souris
Inverser : L'activation de ce paramètre permet au bouton avant d'envoyer une valeur négative et au bouton arrière d'envoyer une valeur positive
Tapez:
1. Clé/Souris : clé/souris
2. Mouvement de la souris : mouvement de la souris et molette de défilement
3. Axe du joystick : Joystick
Axe : L'axe d'entrée de l'appareil (joystick, souris, gamepad, etc.)
Joy Num : Définissez le joystick à utiliser, la valeur par défaut est de recevoir les entrées de tous les joysticks. Uniquement pour les arbres d'entrée et les non-clavettes
obtenir l'axe virtuel
Les codes suivants renvoient tous un booléen, il ne peut donc juger que si la touche liée au bouton virtuel est enfoncée
bool result=Input.GetButton("虚拟按钮名");
bool result=Input.GetButtonDown("虚拟按钮名");
bool result=Input. GetButtonUp("虚拟按钮名");
Les codes suivants renvoient tous un type à virgule flottante, de sorte qu'il peut juger le positif ou le négatif de l'axe virtuel (-1 ~ 1), ou le positif ou le négatif représenté par la clé sur l'axe virtuel
float value=Input.GetAxis ("虚拟轴名");
float value=Input.GetAxisRaw("虚拟轴名");
rotation de la caméra
Déplacez la souris verticalement pour faire pivoter la caméra de haut en bas et déplacez la souris horizontalement pour faire pivoter la caméra de gauche à droite
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//控制摄像机随鼠标的移动而旋转
public class DoRotation : MonoBehaviour
{
public float hor;
public float rotateSpeed;
private void FixedUpdate()
{
//鼠标移动
float x = Input.GetAxis("Mouse X");
float y = Input.GetAxis("Mouse Y");
if (x != 0 || y != 0)
RotateView(x, y);
}
private void RotateView(float x, float y)
{
x *= rotateSpeed;
y *= rotateSpeed;
this.transform.Rotate(-y, 0, 0);
this.transform.Rotate(0, x, 0, Space.World);
}
}
le joueur se déplace
L'entrée verticale du clavier fait avancer et reculer l'avion, l'entrée horizontale du clavier fait bouger l'avion à gauche et à droite
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float moveSpeed = 10;
private void Update()
{
float hor = Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical");
if (hor != 0 || ver != 0)
Movement(hor, ver);
}
private void Movement(float hor, float ver)
{
hor *= moveSpeed * Time.deltaTime;
ver *= moveSpeed * Time.deltaTime;
transform.Translate(hor, 0, ver);
}
}