Space Shoot

  关于Space Shoot这个案例,网上的教程很多也很详细,所以这里我就不怎么写了,就写写自己觉得一些需要记住的有趣的事情。

  Unity的最上面标题栏中,Untitled指未保存的场景,像SamepleScene.unity是指保存的具体场景。之后如Space Shoot是指我们当前项目。后面的PC,Mac & Linux Standalone指编译目标(build target),

即想要的平台。在Switch Platform改变编译目标(平台),Player Setting改变编译细节。

  Resolution(分辨率)无论是贴图的大小还有Game视图的大小界面改观都是有很大的作用的。

  一般各种自带的Collider都可以满足碰撞体(可以改变其变化的伸展方向‘默认是y轴,人型’,大小形状,以及细节)。当然如果一定要用Mesh Collider可以自己替换Mesh Filter里的图像(用少的三角形来替代)。关掉Mesh Renderer 可以看到网格碰撞体(collider的绿线)。

  不需要完整的物理行为,只要碰撞触发一个行为,故在Collider中选勾中“Is Trigger”,从而当做一个触发碰撞器(Trigger Collider)。

  摄影机的位置、方向是有讲究的,其中的Projection(投影)。本游戏是俯视视角的街机游戏,不需要透视(Perspective)(即有近大远小的观感),故正交(orthographis),Field of View和Size分别越大,镜头越广。

  Crete Quad(来创建小地形和背景颜色)比Plane简约。(三角形少一些)

  脚本中的命名规则:如public GameObject playerColltroller或者脚本命名的名称在挂在某个Scenes中对象或者Project中Prefab上在形成组件时会如Player Colltroller.

  Can't add script不能挂脚本在某个Scenes中对象或者Project中Prefab上,一般都是在重命名第一次时错误(类名与脚本名,不一样),系统不会自动改,需要到类里面自己改。或者时空格、中文等问题。

  Unity5.0以后脚本的变化挺大,如rigidbody.veclocity要改写为this.GetComponent<Rigidbody>().velocity = new Vector( ... ,... , ...)。  audio.Play();要改写为this.GetComent<AudioSource>().Play();

  在直接有MonoBehaviour继承的类写public,在外面Inspector中不美观,可以在改脚本加一个普通类(这个类用来声明同一类需要声明的变量),在其前面加上[System.Serializable],从而使其序列化折叠显示。

  如public Transform a;(只用该引用对象的位置,旋转,缩放之类,如a.position,简单) 和 public GameObject b;(指引用整个prefab或模型,如果调用position,要写b.transform.position)。

  还有如GameObject clone = Instantiate(objcet, position, rotation)as GameObject; 中 as GameObject是告诉编译器使Objcet实例化为GameObject的作用。

  如果想要一个方法既可以等待,又不会导致整个游戏暂停,用到coroutine(协程)。yield只能写在IEnumberator 某方法名称()里面,yield return new WaitForSecords(时间),返回值控制何时恢复协程向下执行。 yield就是和Update()里的这一帧方法运行完,运行yield后的内容,再下一帧。Void Start()方法里的StartCoroutine(你的方法名()),启动协同程序。

  在编译发布Unity时,如果Scenes In Build 没有在Add Current任何场景,会默认用当前打开的场景。Player Setting 自己视情况更改。

  prefabs在project也可以挂脚本;一个脚本可以挂多个对象,同样一个对象也可以挂多个脚本。(脚本算是一种辅助组件)。

  关于Space Shoot的资源:

  https://pan.baidu.com/s/1KxMI9u_0-TCfYIQEm6NbXg

  

猜你喜欢

转载自www.cnblogs.com/whpu-wzp/p/9195605.html