Script d'unité (4)

Tutoriel vidéo : https://www.bilibili.com/video/BV12s411g7gU?p=149 

Table des matières

la saisie au clavier 

InputManager 


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);
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_53401568/article/details/128535085
conseillé
Classement