首页 > 其他分享 >Unity基础——Input

Unity基础——Input

时间:2024-05-24 21:56:07浏览次数:22  
标签:float 基础 System private Unity using Input public

Unity基础——Input


1.鼠标输入

//我们在这段代码最后实现一个基本用鼠标控制视角的功能
using UnityEngine;

class Script1 : MonoBehaviour 
{
    [SerializeField]
    private float mouseSensitivity = 30f;
    
    private float xRotation = 0f; //当前的旋转角度
    
    void Update()
    {
        if (Input.GetButtonDown(0)) //检测鼠标左键是否按下, 1和2表示右键和中键
        {
            //Do something.
            Fire();
        }
        
        if (Input.GetButtonUp(0)) //检测鼠标左键是否抬起
        {
            //Do something.
            Ease();
        }
        
        if (Input.GetButton(0)) //检测鼠标左键是否长按
        {
            //Do something.
            Shoot();
        }
        
        //如果是GetAxis()而不是GetAxisRaw(),那么将会返回一个介于[0, 1]的浮点数,后者仅会返回1和0
        //在需要实现一些效果时灵活可以使用,比如想要写一个玩家控制器,且松开键盘后人物还要滑动一段距离而不是立刻停下,
        //就可以使用GetAxis()
        float yRotation = mouseSensitivity * Time.deltaTime * GetAxis("Mouse X"); //检测x轴向的鼠标移动
        float xxRotation = mouseSensitivity * Time.deltaTime * GetAxis("Mouse Y"); //检测y轴向的鼠标移动
        
        xRotation -= xxRotation;
        
        Math.Clamp(xRotation, -90f, 90f);
        
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        
        transform.Rotate(Vector3.up, yRotation, Space.World);
        //或者transform.Rotate(Vector3.up * yRotation, Space.World);
	}
}

2.键盘输入

using UnityEngine;

class Script2 : MonoBehaviour
{
	void Update()
	{
		if (Input.GetKeyDown(KeyCode.W)) //检测某个按键是否被按下
        {
            Move(Direction.Forward);
        }
        
        if (Input.GetKeyUp(KeyCode.S)) //检测某个按键是否抬起
        {
            Move(Direction.Back);
        }
        
        if (Input.GetKey(KeyCode.Enter)) //检测某个键是否被长按
        {
            Confirm();
        }
        
        float u = GetAxis("Horizontal"); //默认设置是AD键
        float v = GetAxis("Vertical"); //默认是WS键
	}
}

3.练习

//1.创建一个坦克预制体,用键盘控制其左右移动,用鼠标的上下拖动控制其炮管的上下旋转,用鼠标的左右拖动模拟炮台的旋转;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using Cursor = UnityEngine.Cursor;

public class InputPractice : MonoBehaviour
{
    [SerializeField] private Transform root;
    [SerializeField] private Transform body;

    public float mouseSensitivity = 100f;
    public float moveSpeed = 44f;

    private float _rootRotation;

    private void Start()
    {
        Cursor.lockState = CursorLockMode.Locked; //锁定光标
        Cursor.visible = false; //隐藏光标
    }

    // Update is called once per frame
    private void Update()
    {
        GunBarrel();
        Move();
    }

    private void GunBarrel()
    {
        var u = Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
        var v = Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;

        _rootRotation -= v;
        _rootRotation = Mathf.Clamp(_rootRotation, -44f, 44f);
        root.transform.localRotation = Quaternion.Euler(_rootRotation, 0f, 0f);
        
        body.Rotate(Vector3.up, u, Space.World);
    }

    private void Move()
    {
        var hor = Input.GetAxisRaw("Vertical") * moveSpeed * Time.deltaTime;
        var ver = Input.GetAxisRaw("Horizontal") * moveSpeed * Time.deltaTime;
        
        transform.Translate(new Vector3(ver, 0, hor), Space.Self);
    }
}


//2.创造一个蜡烛光源(点光源),实现闪烁的效果
using System;
using System.Collections;
using System.Collections.Generic;
using System.Timers;
using UnityEngine;

public class LightPractice : MonoBehaviour
{
    public float maxIntensity;
    public float minIntensity;
    public float nowIntensity;
    public float targetIntensity;

    private Light _light;
    
    [SerializeField] private float flashingRate;
    
    private void Start()
    {
        _light = GetComponent<Light>();
        nowIntensity = minIntensity;
    }

    private void Update()
    {
        if (Mathf.Abs(nowIntensity - minIntensity) < 0.01f) targetIntensity = maxIntensity;
        if (Mathf.Abs(nowIntensity - maxIntensity) < 0.01f) targetIntensity = minIntensity;

        nowIntensity = Mathf.Lerp(nowIntensity, targetIntensity, flashingRate * Time.deltaTime);
        
        _light.intensity = nowIntensity;
    }
}

//3.用直射光模拟日夜变化
using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using UnityEngine;
using Vector3 = UnityEngine.Vector3;

public class LightDayAndNight : MonoBehaviour
{
    public float rotateSpeed;
    // public float dayTime; //可以自定义一天的时间, 以此封装一个更加复杂的天气系统
    
    // Update is called once per frame
    private void Update()
    {
        transform.Rotate(Vector3.left, rotateSpeed * Time.deltaTime, Space.World);
    }
}

写到这里吧,积少成多~

标签:float,基础,System,private,Unity,using,Input,public
From: https://www.cnblogs.com/U3dever/p/18211753

相关文章

  • pwn基础入门-buuctf-2.rip
    2.rip题目:函数溢出,熟悉解题思路过程将下载下来的pwn1文件内容,放到ubuntu中checksec一下ubuntu中checksec文件从图上可以看出它是一个64位程序,仅开启了栈不可执行保护,没有打开NX防护(堆栈可执行),NoPIE.下面我们用IDA打开这个文件F5打开这个文件后,会有这样一......
  • Scala基础(一)从零开始
    Scala是开发Java的核心人员开发的Scala类的编译执行还是使用的Javajdk目录配置Scala安装ScalaSDK 打开IDEA设置安装插件Scala​编辑添加scalaSDKScala基础 变量定义表达式条件表达式 块表达式循环调用方法和函数(所有运算符都是方法) 定义方法和函数(方法......
  • Linux应用——进程基础
    谁来调用main函数在运行main函数之前,会有一段引导代码,最终由这段代码调用main函数,这段引导代码不需要自己编写,而是在编译、链接中由链接器将这段程序链接到应用程序中,构成最终的可执行文件,加载器会将可执行文件加载到内存中进程的终止正常终止在main函数中通过retur......
  • Unity Shader介绍
    1.Shader的基本概念什么是Shader?Shader是小型程序,用于在GPU上运行,处理顶点、像素或其他图形处理单元。Unity主要使用以下两种Shader:顶点Shader(VertexShader):处理每个顶点的数据,如位置、颜色和纹理坐标。片段Shader(FragmentShader):决定每个像素的颜色。Unity中的Shader类型......
  • AIGC基础教学:AI+建筑设计,一场划时代变革的序幕已经拉开
    2015年9月,美的集团本着把艺术融入民间的理念,邀请了安藤忠雄设计正在筹建中的美术馆。在历经长达近120天的设计工作之后,美术馆于同年12月动工。这座具有岭南建筑文化意境的美术馆,后来荣获2020年美国建筑大师奖(ArchitectureMasterPrize)「2020年世界十大博物馆建筑」之一、......
  • AI绘画基础:一件收藏!Midjourney五种优质关键词合集
    今天为大家分享5类高质量Midjourney提示词,包括野外产品场景图、卡通表情包、科技风芯片素材、可无缝拼接的图案等,一起来看看吧~MJ绘画提示词就像是那个及时雨,给你的创作之旅带来一丝清新的风!  自然类场景图 1提示词:Extremeclose-up,aflatmossystoneslab,......
  • Java基础的语法---String
    Java的String类是不可变的,意味着一旦创建,其值就不能被改变。String类提供了丰富的API来操作字符串。以下是一些常用的方法:构造方法:有以下几种常见的:publicclassstringlearn{publicstaticvoidmain(String[]args){Stringstr1="HelloWorld";......
  • 操作系统基础
    文章目录1.操作系统概述2.进程管理3.存储管理4.磁盘管理5.文件管理6.设备管理1.操作系统概述1)操作系统的定义和作用计算机系统的软件分为系统软件和应用软件。系统软件是计算机系统的一部分,支持应用软件的运行。如操作系统、语言处理程序、链接程序、诊断......
  • 【Unity资源】Unity学习资源汇总
    【中文网站】1.Unity官方中文网站(https://learn.u3d.cn)-[推荐]特点:提供官方的Unity资源、教程和支持。内容权威且更新及时。适合人群:所有层次的学员和开发者。2.Unity3D中国(https://unity.cn)-[推荐]特点:Unity的中文官方网站,提供全面的资源和支持,包括下载、......
  • 元器件基础学习笔记——电感的分类及主要参数
    一、电感的分类        电感器是一种电子元件,它能够将电能转化为磁能并储存起来。电感器的分类方法有很多,可以根据用途、形状、结构等不同的标准进行划分。分类依据类型备注电感值固定电感固定线圈可变电感改变磁芯的饱和度用途高频电感绕线型,积层型,薄膜型功率电感绕......