Unity脚本(四)

news2024/11/16 21:29:17

视频教程:https://www.bilibili.com/video/BV12s411g7gU?p=149 

目录

键盘输入 

InputManager 


键盘输入 

当通过名称指定的按键被用户按住时返回true:

bool result=Input.GetKey(KeyCode.A);

当用户按下指定名称按键时的那一帧返回true:

bool result=Input. GetKeyDown(KeyCode.A);

在用户释放给定名称按键的那一帧返回true:

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本质上是一个枚举类 

瞄准镜

通过鼠标右键,实现摄像机镜头缩放

将以下脚本挂载至模板场景中自动创建的Main Camera(如没有就创建一个带有Camera组件的空物体),将Camera组件的Field of View属性设置为60,作为未缩放时的默认值 

  

1.单倍缩放

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

未缩放: 

缩放后:

 2.多倍缩放

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):在a与b之间按t进行线性插值

a起点值
b终点值
t两个浮点数之间的插值

当t=0时,返回a;当t=1时,返回b;当t=0.5时,返回a和b的中点 

代码中的 

index = index < zoomLevel.Length - 1 ? ++index : 0;

 等同于

index = (++index) % zoomLevel.Length;

但后者采用的是数据结构中循环队列的思想

参数设置 

 

 未缩放: 

1级缩放:

2级缩放

InputManager 

即输入管理器,位于Edit-->Project Settings-->InputManager。在脚本中通过使用虚拟轴名称获取自定义键的输入,使玩家可以在游戏启动时根据个人喜好对虚拟轴进行修改 

Descriptive Name:游戏加载界面中,正向按键的详细描述

Descriptive Negative Name:游戏加载界面中,反向按键的详细描述

Negative Button:该按钮会给轴发送一个负值

Positive Button:该按钮会给轴发送一个正值

Alt Negative Button:给轴发送负值的另一个按钮

Alt Positive Button:给轴发送正值的另一个按钮 

ps:一条虚拟轴最多可以绑定四个键,若超过四个,可以在新建同名的虚拟在绑定其余的键

Gravity:输入复位的速度,仅用于类型为键/鼠标的按键

Dead:任何小于该值的输入值(不论正负值)都会被视为0,用于摇杆

Sensitivity:灵敏度,对于键盘输入,该值越大则响应时间越快,该值越小则越平滑。对于鼠标输入,设置该值会对鼠标的实际移动距离按比例缩放

Snap:如果启用该设置,当轴收到反向的输入信号时,轴的数值会立即置为0,否则会缓慢的应用反向信号值。仅用于键/鼠标输入

Invert:启用该参数可以让正向按钮发送负值,反向按钮发送正值 

Type

1.Key /Mouse:键/鼠标

2.Mouse Movement:鼠标移动和滚轮

3.Joystick Axis:摇杆

Axis:设备的输入轴(摇杆,鼠标,手柄等)

Joy Num:设置使用哪个摇杆,默认是接收所有摇杆的输入。仅用于输入轴和非按键

获取虚拟轴

 以下代码均返回的是布尔型,故只能判断虚拟按钮绑定的按键是否按下

bool result=Input.GetButton("虚拟按钮名");

bool result=Input.GetButtonDown("虚拟按钮名");

bool result=Input. GetButtonUp("虚拟按钮名");

 以下代码均放回的是浮点型,故可以判断虚拟轴的正负(-1~1),或说是按键在虚拟轴是代表的正负

float value=Input.GetAxis ("虚拟轴名"); 

float value=Input.GetAxisRaw("虚拟轴名");

镜头旋转

鼠标垂直移动使摄像机上下旋转,鼠标水平移动使摄像机左右旋转

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

玩家移动 

键盘垂直输入使飞机前后移动,键盘水平输入使飞机左右移动

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习笔记——变量和简单数据类型

编码默认情况下&#xff0c;Python 3 源码文件以 UTF-8 编码&#xff0c;所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码。标识符第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Pyth…

【深度学习】机器学习\深度学习常见相关公开数据集汇总(图像处理相关数据集、自然语言处理相关数据集、语音处理相关数据集)

一、前言 1. 介绍 常来说&#xff0c;深度学习的关键在于实践。从图像处理到语音识别&#xff0c;每一个细分领域都有着独特的细微差别和解决方法。 然而&#xff0c;你可以从哪里获得这些数据呢&#xff1f;现在大家所看到的大部分研究论文都用的是专有数据集&#xff0c;这…

超声波测距传感器认知

目录 一、超声波测距传感器认知 二、从零编程实现超声波测距 三、项目——感应开关盖垃圾桶 1、开发步骤 2、感应开关盖垃圾桶代码测试 一、超声波测距传感器认知 超声波测距模块是用来测量距离的一种产品&#xff0c;通过发送和接收超声波&#xff0c;利用时间差和声音…

【网络】udp_socket编程

目录 1.认识端口号 1.1 理解端口号和进程ID 1.2 理解源端口号和目的端口号 2.认识TCP协议 3.认识UDP协议 4.网络字节序 5.socket编程接口 5.1socket常见API 5.2sockaddr结构 sockaddr结构 sockaddr_in 结构 in_addr结构 6.简单的UDP网络程序 6.1创建套接字 6.2 …

【Docker】三 镜像容器常用命令

这里写目录标题1 配置镜像加速器2 Docker镜像常用命令2.1 搜索镜像2.2 下载镜像[重要]2.3 列出镜像[重要]2.3 删除本地镜像[重要]2.4 保存镜像2.5 加载镜像2.6 构建镜像[重要]3 容器常用命令3.1 新建并启动容器[重要]3.2 列出容器[重要]3.3 停止容器[重要]3.4 强制停止容器[重要…

你可以不用Git,但不能不会Git(三)基础(下)

目录 一.将文件添加至忽略列 二.日志记录操作 三.比较文件差异 四.还原文件 一.将文件添加至忽略列 一般我们总会有些文件无需纳入Git的管理&#xff0c;也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件&#xff0c;比如日志文件&#xff0c;或者编译过程中…

重学 Java 设计模式-结构型模式-适配器模式

重学 Java 设计模式-结构型模式-适配器模式 内容摘自&#xff1a;添加链接描述 适配器模式介绍 图片来自&#xff1a;https://refactoringguru.cn/design-patterns/adapter(opens new window) 适配器模式的主要作用就是把原本不兼容的接口&#xff0c;通过适配修改做到统一。…

canva绘制(二次、三次)贝塞尔曲线并且图片在曲线上运动

下图为实现效果&#xff08;图片在三次贝塞尔曲线中运动&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

Spring之注解开发

目录 一&#xff1a;Bean基本注解开发 二&#xff1a;Bean依赖注入注解开发 三&#xff1a;非自定义Bean注解开发 四&#xff1a;Bean配置类的注解开发 五&#xff1a;Spring配置其他注解 六&#xff1a;Spring注解的解析原理 一&#xff1a;Bean基本注解开发 Spring除了…

【区块链】区块链技术学习总结

文章目录一、区块链技术简介1.1 区块链概念1.2 区块链应用1.2.1 区块链1.0技术&#xff1a;比特币1.2.2 区块链2.0技术&#xff1a;以太坊1.2.3 区块链3.0技术&#xff1a;价值互联网二、区块链1.0技术比特币2.1 比特币2.1.1 比特币概念2.1.2 比特币性质2.1.3 比特币解决的问题…

Springboot扩展点之BeanDefinitionRegistryPostProcessor

前言通过这篇文章来大家分享一下&#xff0c;另外一个Springboot的扩展点BeanDefinitionRegistryPostProcessor&#xff0c;一般称这类扩展点为容器级后置处理器&#xff0c;另外一类是Bean级的后置处理器&#xff1b;容器级的后置处理器会在Spring容器初始化后、刷新前这个时间…

第二章 chrony服务器

文章目录第二章 chrony服务器1.1安装与配置1.2同步网络时间服务器1.3 配置时间服务器1.4 chronyc 命令1.5常见时区课后练习第一题&#xff1a;第一台机器从阿里云同步时间&#xff0c;第二台机器从第一台机器同步时间第二题&#xff1a;第一台服务器使用系统时间作为第二台服务…

jetson nano GPIO控制说明

文章目录一.GPIO介绍二.安装GPIO库python库C库三.几种常用的通信协议UARTPWMI2CI2SSPI四.控制函数说明python&#xff08;[参考](https://pypi.org/project/Jetson.GPIO/)&#xff09;C五.例程一.GPIO介绍 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输…

干货 | Web自动化测试中显式等待与隐式等待该怎么用?

在实际工作中等待机制可以保证代码的稳定性&#xff0c;保证代码不会受网速、电脑性能等条件的约束。等待就是当运行代码时&#xff0c;如果页面的渲染速度跟不上代码的运行速度&#xff0c;就需要人为的去限制代码执行的速度。在做 Web 自动化时&#xff0c;一般要等待页面元素…

高压放大器在电子束增材制造聚焦消像散控制技术研究的应用

实验名称&#xff1a;高压放大器在电子束增材制造聚焦消像散控制技术研究的应用 研究方向&#xff1a;增材制造 实验目的&#xff1a; 电子束选区熔化技术&#xff0c;即电子束3D打印技术&#xff0c;属于金属增材制造的分支。该技术以电子束为热源&#xff0c;在计算机控制下以…

华为防火墙配置笔记

防火墙&#xff08;Firewall&#xff09;也称防护墙&#xff0c;是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网&#xff08;US5606668&#xff08;A&#xff09;1993-12-15&#xff09;防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定…

实战工作十年的Code Review方法论与实践总结

作为卓越工程文化的一部分&#xff0c;Code Review其实一直在进行中&#xff0c;只是各团队根据自身情况张驰有度&#xff0c;松紧可能也不一&#xff0c;这里简单梳理一下CR的方法和团队实践。 一、为什么要CR 提前发现缺陷 在CodeReview阶段发现的逻辑错误、业务理解偏差、…

CleanMyMac2023Mac下载排行最好的清理工具

CleanMyMac是Mac清理工具&#xff0c;具有很多功能。例如‬&#xff0c;删除大量不可见的缓存文件&#xff0c;可以批量删除未使用的DMG、不完整的下载以及其余的旧包。不过由于MAC系统不像windows那样会产生缓存或系统垃圾&#xff0c; 使用Win电脑很多人会下载各类系统优化软…

MQ面试题总结

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

【流行框架】Zookeeper

&#x1f31f;个人博客&#xff1a;www.hellocode.top&#x1f31f; &#x1f31f;Java知识导航&#xff1a;Java-Navigate&#x1f31f; ⭐想获得更好的阅读体验请前往Java-Navigate &#x1f525;本文专栏&#xff1a;《流行框架》 &#x1f31e;如没有JavaWEB基础&#xff0…