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,相当于协程暂停。

挺复杂,不好理解,详细参见:

Unity协程到底是个什么玩意?

物理材质Physic Material

Create > Physic Material 创建物理材质;拖拽到Collider的Material上生效。

物理材质的几个属性功能如下:

https://blog.csdn.net/qq_21397217/article/details/80277857

发表评论

电子邮件地址不会被公开。 必填项已用*标注