Unity学习笔记(6)

今天学完了Space Shooter的第六~八个视频,要点如下
1.上次小球的运动,用的是Rigidbody.addForce的方法,这次不用真实的物理运动,直接用Rigidbody.velocity 就行了,后面跟的同样是Vector3
2.Mathf.Clamp方法,可以用于限制变量变化的范围,在实例化对象的时候填到参数中就可以了。用法:Mathf.Clamp(要限制的变量,min,max)
【Unity学习笔记(6)】3.因为在PlayController中声明变量会造成变量特别多(笔记3中有案例)第六个教程中第一次声明了新的类,用于储存xMin,xMax,zMin,zMax四个变量,然后用[System.Serializable]序列化(其实不过是让这四个能够收到Boundary底下而已)


Unity学习笔记(6)
文章图片
看起来很乱的四个变量 4.Quaternion.Euler用于旋转物体,同样是个Vector3向量。不是很明白,为什么不能像给position赋值一样,直接给rotation赋值,得用这种方式。
5.creating shots,创建一个新的Material,然后把Texture拖到Material的Albedo字段中,再把Material拖到创建的Quad上。不是很清楚为什么要手动创建Material,直接把Texture拖到Quad上看起来也是可行的
6.background的shader要选择Unlit/Texture,这样可以保持原有材质,不被光照影响,这次的子弹得选择Particles/Additive,这样黑的会变成透明,整体颜色会更亮(或者是Mobile/Particles/Additive,更节省性能,大部分情况下也不会降低质量),前者可以加上Tint Color,我理解的话就是一种颜色叠加吧
7.创建好子弹后,要开始shoot shots了,这里又用到一个新的重要方法,Instantiate(object,position,rotation),在position的位置,以rotation的旋转来实例化一个object
8.配合着Input.GetButton,终于可以开火了。判断开火时间间隔,在看教程前,尝试着自己写出来了,用了两个时间变量(一个记录距离上次射击时间的LastShotTime,一个用来当做间隔生效的intervalTime,其中前者会随着Time.deltaTime自增,然后每次和后者作比较就可以,如果成功射击了就把LastShotTime归零),官方范例里用了三个,感觉有点多余。教程里倒比较清楚,只用了两个
9.有个细节后面可能要注意一下,用Instantiate实例化对象的时候,整句是GameObject clone = Instantiate(XXXX) as GameObject,这里前面的类型声明和后面的as,对于选择实例化的对象应该会有帮助,现在还不太能理解,教程中也把前后部分注释掉了,只用了实例化的方法
10.另一个教程里提了两次的“Unity很聪明的地方”是,声明类型的时候选择的是public Transform spawnPlace,但是把对应的GameObject拖到这个spawnPlace上也是可以的,会直接读取这个GameObject的transform的值,这样确实可以让代码变得整洁一些。不知道其他类似的地方是不是也能这样处理
今天学的内容比较多,也花了挺长时间去重写练习具体的代码,不过有些忽视了整体结构的处理:比如,子弹的出生点spawnPlace是通过hierarchy窗口挂在Player上的,成为Player对象的子对象;子弹的速度是挂在自己身上的脚本控制的;创建子弹的时候,先是创建了一个空对象,再创建了一个它的子对象Quad,才把子弹的Texture挂上去,完成了以后,又把整个对象拖到Project中生成一个prefab,诸如此类。这一段除了更多的练习,也需要有更多总结,才能把整个结构了然于胸吧。
2018.10.26 0:34

    推荐阅读