Unity【入门】光源、物理、音效系统

news2024/10/6 4:05:38

核心系统

在这里插入图片描述

文章目录

  • 核心系统
    • 1、光源系统基础
      • 1、光源组件
      • 2、光面板相关
    • 2、物理系统之碰撞检测
      • 1、刚体 RigidBody
      • 2、碰撞器 Collider
      • 3、物理材质
      • 4、碰撞检测函数
      • 5、刚体加力
    • 3、音效系统
      • 1、音频文件导入
      • 2、音频源和音频监听器脚本
      • 3、代码控制音频源
      • 4、麦克风输入相关

1、光源系统基础

Standrad Assets
    Effects
        LightCookies
        LigthFlares

1、光源组件

1、面板参数

在这里插入图片描述

在这里插入图片描述

2、代码控制

Public Light ligth;
	light.intensity = 0.5f;

2、光面板相关

设置

Window -> Rendering -> Lighting Settings

在这里插入图片描述

2、物理系统之碰撞检测

1、刚体 RigidBody

在这里插入图片描述

在这里插入图片描述

2、碰撞器 Collider

在这里插入图片描述

3、物理材质

在这里插入图片描述

4、碰撞检测函数

注意:碰撞和触发响应函数属于特殊的生命周期函数也是通过反射调用

在这里插入图片描述

1、物理碰撞检测响应函数

碰撞触发接触时会自动执行这个函数
    private void OnCollisionEnter(Collision collision)
    {
        //Collision类型的参数包含了碰到自己对象的相关信息
        1、碰撞到的对象碰撞器的信息
            collision.collider
        2、碰撞对象的依附对象(GameObject)
            collision.gameObject
        3、碰撞对象的依附对象的位置信息
            collision.transform
        4、接触点个数相关
            collision.contactCount
        //接触点具体坐标
            ContactPoint[] pos = collision.contacts;
	}
碰撞结束分离时会自动执行的函数
	private void OnCollisionExit(Collision collision) { }
两个物体相互接触摩擦时会不停的调用该函数
    private void OnCollisionStay(Collision collision) { }

2、触发器检测响应函数

private void OnTriggerEnter(Collider other)
{
    
}
private void OnTriggerExit(Collider other)
{
    
}
private void OnTriggerStay(Collider other)
{
    
}

3、要明确什么时候会响应函数

1、只要挂载的对象能和别的物体产生碰撞或者触发那么对应的这6个函数就能够被响应
2、如果是一个异形物体,刚体在父对象上,如果你想通过子对象上挂脚本检测碰撞是不行的必须挂载到这个刚体父对象上才行
3、要明确物理碰撞和触发器响应的区别

4、碰撞和触发器函数都可以写成虚函数在子类去重写逻辑

protected virtual void OnTriggerEnter(Collider other) { }

5、刚体加力

在这里插入图片描述

1、刚体自带添加力的方法

刚体加力:让其有一个速度,朝向某一个方向移动
1、首先应该获取刚体组件
    Rigidbody rigidBody;
    void Start()
    {
        rigidBody = GetComponent<Rigidbody>();
    }
2、添加力
    //相对世界坐标系,z轴正方向加力(受阻力影响)
    rigidBody.AddForce(Vector3.forward * 10);
	//相对本地坐标系,z轴正方向加力(受阻力影响)
    方法一:
		rigidBody.AddRelativeForce(Vector3.forward * 10);
	方法二:
    	rigidBody.AddForce(transform.forward * 10);
3、添加扭矩力,旋转
    相对世界坐标
    	rigidBody.AddTorque(Vector3.up * 10);
    相对本地坐标
        rigidBody.AddRelativeTorque(Vector3.up * 10);
4、直接改变速度(相对世界坐标系)
    rigidBody.velocity = Vector3.forward * 5;
5、模拟爆炸效果(只对有代码的脚本的刚体有效果)
    rigidBody.AddExplosionForce(10, Vector3.zero, 10);

2、力的几种模式

第二个参数为力的模式
	rigidBody.AddForce(Vector3.forward * 10, ForceMode.Acceleration);
	根据动量定理Ft = mv, F:力 t:时间 m:质量 v:速度
1、Acceleration
    给物体一个持续的加速度,忽略质量 v = Ft/m
    F:(0,0,10) t:(0.02s) m:默认为1
    v = 10 * 0.02 / 1 = 0.2 m/s
    每物理帧移动 0.2 m/s * 0.02 = 0.004 m
        
2、Force
    给物体一个持续的力,与质量有关 v = Ft/m
    F:(0,0,10) t:(0.02s) m:2kg
    v = 10 * 0.02 / 2 = 0.1 m/s
    每物理帧移动 0.2 m/s * 0.02 = 0.002 m
        
3、Impulse
    给物体一个持续的力,与质量有关,忽略时间
    F:(0,0,10) t:(默认为1s) m:2kg
    v = 10 * 1 / 2 = 5 m/s
    每物理帧移动 5 m/s * 0.02 = 0.1 m
        
4、VelocityChange
    给物体一个瞬时速度,忽略质量和时间
    F:(0,0,10) t:(默认为1s) m:默认为1
    v = 10 * 1 / 1 = 10 m/s
    每物理帧移动 10 m/s * 0.02 = 0.2 m

3、立场脚本

添加立场脚本 Constant Force
    
结束刚体休眠
if (rigidBody.IsSleeping())
{
    rigidBody.WakeUp();
}

思考 让一个物体产生位移的几种方式

1.直接在Update生命周期函数中改变Transform当中的Position属性
2.直接在Update生命周期函数中使用Transform提供的APl TransLate这个方法 
3.通过加力
    rigidBody.AddForce
    rigidBody.AddRelativeForce 
4.通过改变刚体速度变量
	rigidBody.velocity = Vector3.forward * 10;

3、音效系统

1、音频文件导入

1、常用格式

在这里插入图片描述

2、音频文件属性设置

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

2、音频源和音频监听器脚本

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

3、代码控制音频源

1、代码控制播放视频

AudioSource audioSource; //获取音频源
	audioSource = GetComponent<AudioSource>();
    if (Input.GetKeyDown(KeyCode.P))
        audioSource.Play(); //播放
    if (Input.GetKeyDown(KeyCode.S))
        audioSource.Stop(); //停止
	if (Input.GetKeyDown(KeyCode.Space))
    	audioSource.Pause(); //暂停

2、如何检测音效播放完毕

if (audioSource.isPlaying) { }

3、如何动态控制音效播放

1、直接在要播放音效的对象上挂载脚本,控制播放
2、实例化挂载了音效源脚本的对象(较少使用)
    public GameObject obj;
		Instantiate(obj);
3、用一个AudioSource来控制播放不同的音效
    public AudioClip clip;
        AudioSource aud = gameObject.GetComponent<AudioSource>();
        aud.clip = clip;
        aud.Play();

4、麦克风输入相关

1、获取设备麦克风信息

string[] strs = Microphone.devices;
for (int i = 0; i < strs.Length; i++)
{
    print(strs[i]);
}

2、开始录制

参数1:设备名,传空使用默认设备
参数2:超过录制长度后,是否重头录制
参数3:录制时长
参数4:采样率
    
private AudioClip clip;
    if (Input.GetKeyDown(KeyCode.Space))
    {
        clip = Microphone.Start(null, false, 10, 44100);
    }

3、结束录制

if (Input.GetKeyUp(KeyCode.Space))
{
    Microphone.End(null);
    AudioSource au = GetComponent<AudioSource>();
    if (au == null)
    {
        au = gameObject.AddComponent<AudioSource>();
    }
    au.clip = clip;
    au.Play();
}

4、获取音频数据用于存储或传输

//声道数 * 剪辑长度
float[] f = new float[clip.channels * clip.samples];
clip.GetData(f, 0); //0为偏移位置
print(f.Length); //输出采样率

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

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

相关文章

34、shell数组+正则表达式

0、课前补充 jiafa () { result$(echo " $1 $2 " | bc ) print "%.2f\n" "$result" } ##保留小数点两位 薄弱加强点 a$(df -h | awk NR>1 {print $5} | tr -d %) echo "$a"一、数组 1.1、定义 数组的定义&am…

Visual Studio2022+cuda环境配置及代码调试

环境配置 下载并安装CUDA Toolkit 打开Visual Studio&#xff0c;新建项目。如下图所示&#xff0c;已经包含CUDA编程选项 代码调试 1、打开cu文件的属性页&#xff0c;按下图所示&#xff0c;将Host中的Generate Host Debug Information设置为“是" 2、不可勾选Nsight…

System.Dynamic.ExpandoObject的使用说明

官方文档 ExpandoObject 类 (System.Dynamic) | Microsoft Learn https://learn.microsoft.com/zh-cn/dotnet/api/system.dynamic.expandoobject?viewnet-8.0 System.Dynamic.ExpandoObject 类 - .NET | Microsoft Learn https://learn.microsoft.com/zh-cn/dotnet/fundame…

虚拟机安装JDK11操作教程

1、新建/usr/java目录 mkdir /usr/java 2、将jdk-11文件上传/usr/java目录 3、解压jdk-11文件 tar -zxvf jdk-11_linux-x64_bin.tar.gz 4、编辑配置文件&#xff0c;配置环境变量 vi /etc/profile 在打开的文件末尾添加 export JAVA_HOME/usr/java/jdk-11 export JRE_HOM…

接口自动化之参数快递的几种方式!

1. 直接在代码中硬编码 这是最简单直接的方式&#xff0c;直接在测试脚本中写入具体的参数值。但这种方法不灵活&#xff0c;难以维护&#xff0c;也不利于数据的复用。 def test_api_request(): response requests.get("http://example.com/api?paramvalue")…

一文读懂一致性Hash算法

Hash算法 哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。 Hash算法在安全加密领域MD5、SHA等加密算法,数据存储和查找的Hash表等方面均有应用。Hash表的数据查询效率极高,时间…

借助Aspose.Email,使用 C# .NET 创建 PST 文件并填充内容

PST&#xff08;个人存储表&#xff09;文件是管理 Outlook 数据的重要组成部分&#xff0c;方便存储电子邮件、联系人、日历和其他项目。在 C# .NET 开发领域&#xff0c;创建和管理存储文件的过程对于各种应用程序至关重要。 在本文中&#xff0c;我们将探讨如何使用 C# .NE…

江苏新世纪信息科技有限公司

NCT是国内专业从事信息化人才培训、咨询&#xff0c;以及企业级数字化培训平台建设&#xff0c;企业内训课程、课件制作&#xff1b;工业企业智能制造诊断和信息化规划服务&#xff1b;信息化建设项目的运维服务和解决方案为一体的标准应用服务商。NCT是中国ITSS实训基地的运营…

云专线组网方案的特性和实施要素

云专线组网方案是指企业通过专用的网络连接&#xff0c;将其内部网络与云服务商的数据中心直接相连&#xff0c;从而实现高速、安全、稳定的云资源访问。云专线通常提供比公共互联网更优的网络性能&#xff0c;包括更低的延迟、更高的带宽和更强的安全性。以下是云专线组网方案…

去中心化衍生品协议内卷,ZKX 能否通过差异化道路突出重围?

去中心化衍生品赛道目前从协议类型来看&#xff0c;主要有两种解决方案&#xff1a; 以 GMX 为代表的 Vault 模式&#xff0c;LP 作为交易者的对手盘&#xff0c;由 Orcale 喂价决定交易价格。 以 dYdX 为代表的订单薄模式&#xff0c;链下撮合链上结算。 这两种解决方案虽然…

法国电信集团高层莅临美格智能参观交流,共商行业未来

6月19日&#xff0c;世界500强法国电信Orange集团高层一行莅临美格智能深圳总部参观交流。美格智能董事长王平、副总裁兼西安产品线总经理李小兵携公司管理层对Orange团队的到访表示热烈欢迎&#xff0c;双方就FWA市场的发展、双方之间前期合作情况以及未来规划进行了会谈与交流…

qmt量化交易策略小白学习笔记第42期【qmt编程之期货数据--如何获取历史主力合约--内置python】

qmt编程之获取期货数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取历史主力合约 …

Hive数据锁问题处理

在测试环境有定时任务会定期将flume采集的数据load到hive表中&#xff0c;在查看yarn application过程中发现load操作没有执行&#xff0c;且后续的任务在上一个任务执行结束后很久才开始。感觉像是阻塞一样&#xff0c;于是手动执行相关脚本&#xff0c;发现也是会卡住&#x…

分享vs code十大好用的插件

1.Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 将 VS Code 界面改成简体中文。 2.PDF Viewer 在VS Code 中打开 PDF文件。 3.TODO Highlight 这个扩展会突出显示您的待办事项注释&#xff0c;并提醒存在未完成的注释或任务。 该扩展附带了内…

基于SpringBoot+Mysql+Eclipse开发的仓库管理系统

基于SpringBootMysqlEclipse开发的仓库管理系统 项目介绍&#x1f481;&#x1f3fb; 在当今竞争激烈的商业环境中&#xff0c;仓库管理系统的效率和准确性对于企业的运营至关重要。随着企业规模的扩大和商品种类的增加&#xff0c;传统的仓库管理方式已经无法满足高效、精准的…

Android面试题 之App性能优化的卡顿监控和卡顿优化

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 卡顿优化 这里主要介绍卡顿优化方面的布局优化 布局优化 1、 在主线程中&#xff0c;加载SP&#xff0c;或者是缓存加载&#xff0c;JSON解析…

【Oracle APEX开发小技巧2】在不通过类型转换的前提下使用Oracle APEX自带的格式掩码实现数值的精确展现

在日常APEX开发中&#xff0c;你也许会遇到过这种情况&#xff0c;输入两个数值&#xff0c;通过相除得到比率&#xff0c;但是如果比率小于1&#xff0c;小数点前的0往往会被省略&#xff0c;例如“0.32”会展示为“.32”&#xff0c;不符合正常的表达。 原来的效果&#xff1…

海量数据处理利器 Roaring BitMap 原理介绍

作者&#xff1a;来自 vivo 互联网服务器团队- Zheng Rui 本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用&#xff0c;分别主要介绍了Roaring BitMap的存储方式及三种container类型及Java中Roaring BitMap相关API使用。 一、引言 在进行大数据开发时&#xff0c;…

【数据结构】【版本1.3】【线性时代】——栈

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、栈的概念二、栈的模拟实现2.1 定义2.2 初始化2.3 销毁2.4 压栈2.5 判空2.6 出栈2.7 获取栈顶元素2.8…

一分钟生成论文全文,这款AI论文神器你不会还不知道吧?

毕业季写论文就选范文喵AI论文助手。范文喵V2.0主要包括了论文范文、选题分析、开题报告、任务书的写作、以及论文答辩PPT、论文解读等功能。此外&#xff0c;我们也会在近期进一步优化范文喵论文助手&#xff0c;写作效果更好的V3.0版本预计将于今年7月份和大家见面&#xff0…