Updated on 十月 27, 2021
Create with Code学习笔记
一些基本操作
按下鼠标右键时,wasd可以操控视角前后左右移动,qe可以操控上下移动。
选中某个object时,按下alt/option,并且按下鼠标左键,拖动鼠标,可以以该object为中心转动视角。
小车碰撞箱子后车飞了
Edit -> Project Settings -> Physics
修改Default Max Depenetration Velocity修改到100。不知道为什么,暂时能解决。
感觉这里设置值得仔细研究。
使用Instantiate创建实例
使用Instantiate(prefab, position, rotation)创建在某个位置上创建一个prefab实例。(例如发射子弹)
Mesh Collider和Box Collider
个人理解:Mesh Collider是以模型的边界作为碰撞计算边界,由许多三角形构成。如果模型非常复杂, 则计算量较大;Box Collider是以设置的长方体边界作为碰撞计算边界,可以通过EditCollider修改碰撞边界。
一个Object可以绑定多个script
都生效
修改后,点击Overrides应用到prefab
rt
Nested Prefabs与Prefab Variant
https://learn.unity.com/tutorial/introduction-to-nested-prefabs
https://www.bilibili.com/video/BV1ut411e7RQ
可以翻译成 嵌套Prefab 与 Prefab变体。
Nested Prefabs:考虑如下需求——枪+瞄准镜。枪和瞄准镜都是Prefab。如果没有嵌套Prefab,那么想修改瞄准镜,需要把每一种枪的瞄准镜都修改了;如果有嵌套Prefab,只需修改瞄准镜的Prefab即可,修改完成后,所有的枪+瞄准镜Prefab中的瞄准镜都发生改变。
Prefab Variant:考虑如下需求——一群机器人,长得都一样,有的移动快有的慢,有的尺寸大有的小。可以使用Prefab Variant,对机器人Prefab生成变种(右击Prefab – Create – Prefab Variant),可以修改变种的属性,例如移动速度、尺寸等。如果修改Base Prefab,例如换个头,则会应用到所有Prefab变种上。
理论听得一知半解。实际应用中这两个需求应该是刚需,会方便许多。
Vector3.normalized
可以获得该向量的单位长度的向量。
ForceMode
给Rigidbody施加力,调用AddForce函数,ForceMode可以有4种选择。
Force – 连续施力,质量有关
Impulse – 瞬时力,质量有关
Acceleration – 连续加速,质量无关
VelocityChange – 瞬时加速,质量无关
动画
playerAnim = GetComponent<Animator>(); 获取到animator,
playerAnim.SetTrigger(“Jump_trig”); 触发动画条件。
playerAnim.SetBool(“Death_b”, true); 设置变量状态
Rigidbody设置质量
可以在Rigidbody中设置mass改变质量。看起来改变质量不影响降落速度。
找到某个Object,从其身上获取某个脚本
GameObject.Find("Player").GetComponent<Player>();
获取某个类型的Object数组
FindObjectsOfType<Enemy>()
对比Tag
gameObject.CompareTag("Ground")
播放粒子动画
explosionParticleSystem.Play(); 播放
explosionParticleSystem.Stop(); 停止
声音播放
无论播放音乐还是音效, 都是通过AudioSource播放AudioClip。
背景音乐播放可以在Camera下添加AudioSource,将音频asset拖拽到AudioClip上。
音效可以再代码中,通过GetComponent<AudioSource>()获取到AudioSource,再调用audioSource.PlayOneShot(crashSound, 1.0f);播放(crashSound为AudioClip)
带有方向的音效
将场景中的物体添加AudioSource,拖动Spatial Blend到3D。还可以选择多普勒效应等级。
IEnumerator,yield,协程
void Start() { StartCoroutine(Count3sec()); } IEnumerator Count3sec() { yield return new WaitForSeconds(3); Debug.Log("This happens after 3 seconds"); }
在返回IEnumerator的方法内,可以多次yield return,相当于协程暂停。
挺复杂,不好理解,详细参见:
物理材质Physic Material
Create > Physic Material 创建物理材质;拖拽到Collider的Material上生效。
物理材质的几个属性功能如下:
![](http://zhuqiaochu.truestudio.tech/wp-content/uploads/2021/10/PhysicMaterial.png)