unity知识点小结02

news2024/12/23 19:08:22

虚拟轴

虚拟轴就是一个数值在-11内的轴,这个数轴上重要的数值就是-1,0和1。当使用按键模拟一个完整的虚拟轴时需要用到两个按键,即将按键1设置为负轴按键,按键2设置为正轴按键。在没有按下任何按键的时候,虚拟轴的数值为0;在按下按键1的时候,虚拟轴的数值会从0-1进行过渡,而不是直接变成-1,;在按下按键2的时候,虚拟轴的数值会从0~1进行过渡
在这里插入图片描述
通过Project Settings设置轴的数量以及属性等
在这里插入图片描述

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

public class AxisText : MonoBehaviour
{
    void Start()
    {
        
    }
    void Update()
    {
        //获取水平轴
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Debug.Log(horizontal + " " +vertical);
        //虚拟按键
        if (Input.GetButtonDown("Jump")) {//触发按键
            Debug.Log("空格");
        }
    }
}

通过按下上下左右键可改变其水平,垂直虚拟轴的值
在这里插入图片描述

手机,平板等设备实现触摸操作

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

public class TouchText : MonoBehaviour
{
    
    void Start()
    {
        //开启多点触摸
        Input.multiTouchEnabled = true;
    }

    void Update()
    {
        //判断单点触摸
        if (Input.touchCount ==  1) {
            //获取触摸对象
            Touch touch = Input.touches[0];
            //获取触摸位置
            Debug.Log(touch.position);
            //获取触摸阶段
            switch (touch.phase)
            {
                case TouchPhase.Began://开始触摸
                    break;
                case TouchPhase.Moved://触摸移动
                    break;
                case TouchPhase.Stationary://触摸静止
                    break;
                case TouchPhase.Ended://触摸结束
                    break;
                case TouchPhase.Canceled://触摸因为其他事件打断
                    break;
            }

            //判断多点触摸
            if (Input.touchCount == 2) {
                Touch touch1 = Input.touches[0];//获取第一个触摸点
                Touch touch2 = Input.touches[1];//获取第二个触摸点
            }
        }
    }
}

实时灯光是通过实时计算形成的灯光----性能消耗高
烘焙灯光是当灯光在场景中已经形成相应的效果我们可以把灯光删除,但是场景依然存在灯光效果

在这里插入图片描述
在这里插入图片描述

相机深度,如果场景里面同时存在多个相机,默认显示深度较高的那个相机拍摄到的物体,清除标志如果是仅深度那么就是将各个相机排到的物体叠加显示

通过脚本控制音乐播放

将音频文件放入项目并在物体脚本中设置相应的变量,将音频添加到脚本中
在这里插入图片描述

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

public class MusicText : MonoBehaviour
{
    // 获取需要播放的音频片段
    public AudioClip mode;
    public AudioClip mode2;

    //播放器组件
    private AudioSource player;
    void Start()
    {
        //获取播放器组件
        player = GetComponent<AudioSource>();
        //设定播放的片段
        player.clip = mode;
        //实现循环播放
        player.loop = true;
        //控制音量
        player.volume = 0.5f;
        //开始播放
        player.Play();
        
    }

    void Update()
    {
        //按空格实现暂停和继续
        if (Input.GetKeyDown(KeyCode.Space)) {
            if (player.isPlaying)
            {
                player.Pause();//暂停
                //player.Stop();//停止

            }
            else {
                player.UnPause();//继续播放
                //player.Play();//重新播放
            }
        }

        //按下按键播放其他音效
        if (Input.GetMouseButtonDown(0)) {
            player.PlayOneShot(mode2);//播放一次音效
        }
    }
}

视频播放

先将视频文件导入项目,在场景中穿件一个平面,并且穿件一个渲染器纹理,在将视频文件加到渲染器纹理中,在创建控制视频播放的脚本,将脚本添加到纹理器中。

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

public class VudioText : MonoBehaviour
{
    private VideoPlayer player;//用于接收视频文件
    void Start()
    {
        player = GetComponent<VideoPlayer>();//接收视频文件
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) {
            if (player.isPlaying)
            {
                player.Pause();
            }
            else {
                player.Play();

            }
        }
    }
}

控制人物移动

在编写脚本之前我们要向人物添加Character Controller组件
在这里插入图片描述

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

public class MoveText : MonoBehaviour
{
    private CharacterController player;//创建角色控制器
    void Start()
    {
        player = GetComponent<CharacterController>();

    }

    void Update()
    {
        //获取水平轴
        float horizontal = Input.GetAxis("Horizontal");
        //获取垂直轴
        float vertical = Input.GetAxis("Vertical");
        //创建成一个方向向量
        Vector3 dir = new Vector3(horizontal,0,vertical);
        //让物体朝该方向移动
        //player.Move(dir);   //该方法不存在重力效果
        player.SimpleMove(dir);
    }
}

碰撞及监听

要实现物体的碰撞效果,首先要将物体都设置碰撞器,此外还要确保碰撞的物体最少其中一个要有设置刚体组件

在这里插入图片描述

首先对碰撞物体进行脚本编写来监听碰撞事件 ,写者编写的碰撞为两物体碰撞之后产生爆炸,碰撞时销毁物体然后产生爆炸效果,一定时间后又将爆炸效果销毁
爆炸预设体挂载脚本
在这里插入图片描述

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

public class ColText : MonoBehaviour
{
    //创建碰撞之后产生效果的预设体
    public GameObject prefad;
    void Start()
    {
        
    }

    
    void Update()
    {
        
    }
    //监听发生爆炸    函数所带的元素为和自己发生碰撞的物体
    private void OnCollisionEnter(Collision collision)
    {
        //产生碰撞创建碰撞效果物体   (创建预设体,设定预设体初始位置设置预设体初始旋转)
        Instantiate(prefad, transform.position, Quaternion.identity);
        //销毁自身
        Destroy(gameObject);
    }

    //持续碰撞中
    private void OnCollisionStay(Collision collision)
    {

    }

    //结束碰撞
    private void OnCollisionExit(Collision collision)
    {
        
    }
}

如果要销毁碰撞后产生的爆炸效果应该在单独编写脚本并且将脚本挂载到爆炸效果的预设体上
在这里插入图片描述

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

public class ExplorText : MonoBehaviour
{
    float timer = 0;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        timer += Time.deltaTime;
        if (timer > 1) { 
        Destroy(gameObject);     
        }
    }
}

触发器

当某个物体到达某个位置或者触发到某个触发器之后会触发其他场景物体效果
写者将做一个将目标对象移到固定位置造成固定物体消失
触发器和碰撞的区别,设置触发器物体之间可以穿透,碰撞物体之间不能穿透

设置正方体以及长方体为触发器,胶囊移动到正方体位置长方体消失
在这里插入图片描述

在这里插入图片描述

为胶囊设置移动脚本,见上文
为正方体设置触发事件脚本

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

public class moveclo : MonoBehaviour
{
   
    void Start()
    {
        
    }
    void Update()
    {
        
    }
    //进入触发器   函数元素代表进入触发区的物体
    private void OnTriggerEnter(Collider other)
    {
        //若有物体进入触发器,将名称为door的物体设为不显示
        GameObject door = GameObject.Find("door");
        if (door != null) { 
            door.SetActive(false);
        }
    }
    //停留在触发器中
    private void nTriggerStay(Collider other)
    {
        
    }
    //离开触发器
    private void OnTriggerExit(Collider other)
    {
        
    }
}

效果展示
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【UEFI基础】UEFI事件介绍

简述 在【UEFI基础】System Table和Architecture Protocols介绍Boot Service时提到有一部分与事件相关的接口&#xff0c;它们创建、触发、等待和关闭事件&#xff0c;来完成某些功能&#xff0c;本文将进一步介绍事件。 需要注意&#xff0c;因为Boot Service需要在DXE阶段才…

用数组名作函数参数的详解,以及形参实参采用数组名,形参实参采用指针变量的几种情况解析

关于地址&#xff0c;指针&#xff0c;指针变量可以参考我的这篇文章&#xff1a; 地址&#xff0c;指针&#xff0c;指针变量是什么&#xff1f;他们的区别&#xff1f;符号&#xff08;*&#xff09;在不同位置的解释&#xff1f;_juechen333的博客-CSDN博客https://blog.csd…

Kali的安装与配置

虚拟机安装kali Kali下载 官网下载地址 注&#xff1a;下载VMware版本 百度网盘 提取码&#xff1a;Chen 创建虚拟机 将下载的压缩包放到合适的位置解压 双击运行虚拟机 登录 默认的账号密码都为kali 基本配置 修改root账户密码 打开命令行输入 sudo su root 输入kali 输…

【机器学习】验证集loss震荡(loss的其他问题)

训练过程中发现&#xff0c;train loss一直下降&#xff0c;train acc一直上升&#xff1b;但是val loss、val acc却一直震荡。loss一会上一会下&#xff0c;但是总体趋势是向下的。 “loss震荡但验证集准确率总体下降” 如何解决&#xff1f; 测试集准确率这样震荡是正常的吗…

python2.7/3.8版本安装教程

Wiondos-Python环境安装 Python2.7 下载地址 官网 速度比较慢 百度网盘 提取码:Chen 安装Python2.7 直接next 选择安装目录 注意这一步将最后一项勾选 安装完成 cmd中输入python 检查pip是否安装 cmd中输入pip --version Python3.8 下载地址 官网 速度比较慢 百度网…

蓝桥杯C/C++程序设计 往届真题汇总(进阶篇)

文章目录1. 最短路2. 数字三角形3. 递增序列4. 杨辉三角形5. 跳跃6. 路径7. 迷宫8. 装饰珠9. 明码10. 字串分值11. 作物杂交12. 承压计算13. 全球变暖14. 直线15. 平面切分1. 最短路 题目描述&#xff1a; 如下图所示&#xff0c;G是一个无向图&#xff0c;其中蓝色边的长度是…

线程池执行父子任务,导致线程死锁

前言&#xff0c; 一次线程池的不当使用&#xff0c;导致了现场出现了线程死锁&#xff0c;接口一直不返回。而且由于这是一个公共的线程池&#xff0c;其他使用了次线程池的业务也一直阻塞&#xff0c;系统出现了OOM&#xff0c;不过是幸好是线程同事测试出来的&#xff0c;没…

RPC通信原理解析

一、什么是RPC框架&#xff1f; RPC&#xff0c;全称为Remote Procedure Call&#xff0c;即远程过程调用&#xff0c;是一种计算机通信协议。 比如现在有两台机器&#xff1a;A机器和B机器&#xff0c;并且分别部署了应用A和应用B。假设此时位于A机器上的A应用想要调用位于B机…

第十一届蓝桥杯大赛青少组国赛Python真题2

第十一届蓝桥杯大赛青少组Python 真题 第二题 提示信息&#xff1a; 杨辉三角形&#xff0c;是二项式系数在三角形中的一种几何排列。中国南宋数学家杨辉在 1261 年所著的《详 解九章算法》一书有明确记载。欧洲数学家帕斯卡在 1654 年发现这一规律&#xff0c;所以又叫做帕斯卡…

Rabbit快速入门

入门案例 需求&#xff1a;使用简单模式完成消息传递 步骤&#xff1a; 创建工程&#xff08;生成者、消费者&#xff09; 分别添加依赖 编写生产者发送消息 编写消费者接收消息 3.1.2. 添加依赖 往heima-rabbitmq的pom.xml文件中添加如下依赖&#xff1a; <dependenc…

RabbitMQ的安装和配置

注意: 请使用资料里提供的CentOS-7-x86_64-DVD-1810.iso 安装虚拟机. 1. 安装依赖环境 在线安装依赖环境&#xff1a; yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz2. 安装Erlang 上…

【完整版】国内网络编译,Ambari 2.7.6 全部模块源码编译笔记

本次编译 ambari 2.7.6 没有使用科学上网的工具,使用的普通网络,可以编译成功,过程比 ambari 2.7.5 编译时要顺畅。 以下是笔记完整版。如果想单独查看本篇编译笔记,可参考:《Ambari 2.7.6 全部模块源码编译笔记》 该版本相对 2.7.5 版本以来,共有 26 个 contributors …

使用labelImg标注自己的VOC数据集

文章目录1.下载labelImg2.准备文件夹3.打开软件4.软件使用1.下载labelImg 步骤&#xff1a;WindowsR打开运行界面→输入cmd打开命令行窗口→输入pip install labelImg命令&#xff08;前提是python版本在3.0以上并安装anaconda&#xff0c;如果没有安装anaconda&#xff0c;输…

cmd窗口中java命令报错。错误:找不到或无法加载主类 java的jdk安装过程中踩过的坑

错误: 找不到或无法加载主类 HelloWorld 遇到这个问题时&#xff0c;我尝试过网上其他人的做法。有试过添加classpath&#xff0c;也有试过删除classpath。但是依然报错&#xff0c;这里javac可以编译通过&#xff0c;说明代码应该是没有问题的。只是在运行是出现了错误。我安装…

卷积神经网络的原理及实现

专栏&#xff1a;神经网络复现目录 卷积神经网络 本章介绍的卷积神经网络&#xff08;convolutional neural network&#xff0c;CNN&#xff09;是一类强大的、为处理图像数据而设计的神经网络。 基于卷积神经网络架构的模型在计算机视觉领域中已经占主导地位&#xff0c;当今…

【C3】进程休眠,时间和延时,延缓,/proc文件系统,内存分配,数据类型,/内核中断,通过IO内存访问外设

9.实现进程休眠&#xff1a;条件不够歇一歇&#xff0c;把CPU让给其他进程 有时候进程在读设备时&#xff0c;发现设备数据还没准备好&#xff0c;没办法正常读取设备。或在写设备时&#xff0c;发现设备缓冲区满&#xff0c;没办法正常写设备。在遇到这些情况时&#xff0c;进…

SpringCloud之 Eureka注册中心

文章目录Eureka注册中心一、服务注册与发现1.1 依赖导入①父工程 SpringCloud 版本管理②Eureka 服务端依赖③Eureka 客户端依赖1.2 服务注册①创建 Eureka 服务端的主类②设置 Eureka 服务端的配置文件③设置 Eureka 客户端的配置文件④关闭自我保护机制1.3 服务发现①远程调用…

计算机视觉废钢堆提取问题

计算机视觉废钢堆提取问题 背景介绍 在钢铁炼制中&#xff0c;废钢是非常重要的原料&#xff0c;不同等级废钢对于钢成品影响很大&#xff0c;因此需要对废钢进行正确分类。某废钢料场中&#xff0c;卸料区域布置了多个摄像头&#xff0c;用于拍摄卸料场中废钢堆&#xff0c;…

python 连接数据库

文章目录同步操作同步连Mysql同步连redis同步连mongodb异步操作异步连mysql异步连redis异步连mongodb同步操作 同步连Mysql python 连接mysql可以使用pymysql、mysqlclient等。 安装&#xff1a; # win pip install pymysql 连接mysql: # __author__ "laufing"…

Java各种锁

目录 一、读写锁(ReentrantReadWriteLock) 二、非公平锁(synchronized/ReentrantLock) 三、可重入锁/递归锁(synchronized/ReentrantLock) 四、自旋锁(spinlock) 五、乐观锁/悲观锁 六、死锁 1、死锁代码 2、死锁的检测(jps -l 与 jstack 进程号) 本文通过学习&#xff…