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

核心系统

在这里插入图片描述

文章目录

  • 核心系统
    • 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.mfbz.cn/a/731163.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【单片机毕业设计选题24018】-基于STM32和阿里云的农业大棚系统

系统功能: 系统分为手动和自动模式&#xff0c;上电默认为自动模式&#xff0c;自动模式下系统根据采集到的传感器值 自动控制&#xff0c;温度过低后自动开启加热&#xff0c;湿度过高后自动开启通风&#xff0c;光照过低后自动开启补 光&#xff0c;水位过低后自动开启水泵…

C++初学者指南第一步---11.字符串(基础)

C初学者指南第一步—11.字符串&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---11.字符串&#xff08;基础&#xff09;1. std::string2. char std::string的元素类型3. std::string字符串操作4. 字面量4.1 C风格字符串字面量4.2 "std::string 字面量"s…

openEuler 22.03 (LTS-SP1)服务器用ntpd同步GPS时间服务器的案例

本文记录了openEuler 22.03 (LTS-SP1)的二级时间服务器用chronyd不能自动同步GPS时间服务器&#xff0c;改用ntpd同步GPS时间服务器成功的案例 一、环境简述 1、本环境中有两台GPS一级时间服务器&#xff0c;IP如下&#xff1a; 192.168.188.66 192.168.188.74 2、有一台o…

交易中的特殊存在

在交易的广袤天空中&#xff0c;有一群特殊的存在——他们&#xff0c;是Eagle Trader。 他们以鹰眼般的洞察力&#xff0c;捕捉市场的微妙变化&#xff0c;每一次决策都如同猎食者般精准&#xff1b;他们运用策略&#xff0c;如同雄鹰在风中翱翔&#xff0c;利用风向&#xf…

3dsMax怎样让渲染效果更逼真出色?三套低中高参数设置

渲染是将精心构建的3D模型转化为逼真图像的关键步骤。但要获得令人惊叹的渲染效果&#xff0c;仅仅依赖默认设置是不够的。 实现在追求极致画面效果的同时&#xff0c;兼顾渲染速度和时间还需要进行一些调节设置&#xff0c;如何让渲染效果更加逼真&#xff1f; 一、全局照明与…

AI播客下载:The Gradient-AI前沿见解

The Gradient 是一个致力于让更多人轻松了解人工智能&#xff0c;并促进人工智能社区内讨论的组织。我们目前开展的项目包括 The Gradient 杂志、The Gradient 播客、The Update 通讯以及 Mastodon 实例 Sigmoid Social。 我们是一个由来自不同机构和公司的研究生、研究人员及…

【Ubuntu下 qmqtt6.2编译及使用】

这里写自定义目录标题 一、编译二、使用 背景&#xff1a;最近用QT编写简单的HMI软件&#xff0c;mqtt通信&#xff0c;记录下编译过程&#xff0c;供参考。 一、编译 QT6.5.3 qmqtt6.2&#xff08;源码地址&#xff1a;https://github.com/qt/qtmqtt/tree/6.5.3&#xff09; …

E84-晶圆载具交接自动化

E84是一种通讯协议&#xff0c;它的核心作用在于为通讯传感器/设备的开发提供基础架构。 E84协议详细阐述了晶圆载具&#xff08;如FOUP/POD等&#xff09;在工厂自动化物料搬运系统&#xff08;AMHS&#xff09;与机台装载端口&#xff08;LP&#xff09;之间&#xff0c;如何…

c++ 里构造函数的形参与数据成员的同名问题

如题&#xff0c;这时&#xff0c;或许在 java 里&#xff0c;会报语法错误。但在 c vs2019 开了 c20语法规范。这不再是错误。这样的好处是解决了咱们的起变量名的麻烦&#xff1a;重名现在已不是错误&#xff0c;编译器可以解决了。测试如下&#xff1a; 我们看看 c 编译器是…

Android studio中如何下载sdk

打开 file -> settings 这个页面, 在要下载的 SDK 前面勾上, 然后点 apply 在 platforms 中就可以看到下载好的 SDK: 如果sdk下载失败是不是硬盘没有权限&#xff0c;管理员权限从启android studio运行下载sdk

鸿蒙开发:【组件启动规则(FA模型)】

组件启动规则&#xff08;FA模型&#xff09; 启动组件是指一切启动或连接应用组件的行为&#xff1a; 启动PageAbility、ServiceAbility&#xff0c;如使用startAbility()等相关接口。连接ServiceAbility、DataAbility&#xff0c;如使用connectAbility()、acquireDataAbili…

程序猿大战Python——面向对象——对象属性

什么是属性 目标&#xff1a;了解什么是属性&#xff1f; 在现实生活中&#xff0c;属性就表示固有特征&#xff0c;比如&#xff1a;一辆小轿车的属性有轮胎数、颜色、品牌等。 仔细观察后会发现&#xff0c;属性可以简单理解为与生俱来的特征&#xff0c;比如一个人的姓名、年…

ArcGIS消除碎图斑

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 这次是上次 我们经常在相交、标识、更新等操作后或者是栅格转矢量可能存在很多的细碎图斑&#…

RGB彩色模型理解与编程实例

一、引言 RGB彩色模型中的R、G和B为三原色&#xff0c;通常R、G和B分别用8位表示&#xff0c;因此24位的RGB 真彩色图像能表示16777216种颜色。在如右图所示RGB彩色立方体可知&#xff0c;任意两种原色混合可以合成一种新的颜色。红&#xff08;1&#xff0c;0&#xff0c;0&a…

【算法训练记录——Day32】

Day32——贪心算法Ⅱ 1.leetcode122买卖股票的最佳时机II2.leetcode55跳跃游戏3.leetcode45跳跃游戏II4.eetcode1005K次取反后最大化的数组和 目标&#xff1a; leetcode122买卖股票的最佳时机IIleetcode55跳跃游戏leetcode45跳跃游戏IIleetcode1005K次取反后最大化的数组和 1…

AI音乐:创新引擎还是创意终结者?

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

玄机平台流量特征分析-蚁剑流量分析

前言 蚁剑的流量特征 (1)每个请求体都存在ini_set(“display_errors”, “0”);set_time_limit(0)开头。并且后面存在base64等字符 (2)响应包的结果返回格式为&#xff1a; 随机数 响应内容 随机数 看一下题目要求 步骤1.1 这里要求我们找到木马的连接密码&#xff0c;…

aws的eks(k8s)ingress+elb部署实践

eks&#xff08;k8s&#xff09;版本1.29 ingress 版本1.10.0 负载均衡elb 1. 创建Ingress-Nginx服务 部署项目地址【点我跳转】推荐自定义部署 可绑定acm证书什么的自己属性 这里就是aws上面Certificate Manager产品上面创建证书 导入 创建都行 对应集群版本推荐阵列GitH…

springboot宠物领养系统-计算机毕业设计源码07863

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

MySQL之复制(九)

复制 复制管理和维护 确定主备是否一致 在理想情况下&#xff0c;备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误&#xff0c;备库同样可能因为MySQL自身的特性导致数据不一致&#xff0c;例如MySQL的Bug、网络中断、服务…