初识Unity —— 两课之后的学习总结
跟了两个官网tutorial了,来总结下都学了些什么吧。
在Unity里做出一个游戏的基本流程是什么呢?(一个单场景的游戏)
1. 把游戏里会出现的“物品”都摆进去并设置好(包括UI)
2. 调整镜头和光线(2d游戏可能不大需要)
3. 通过脚本让“物品”动起来、“物品”和“物品”产生交互、“物品”和玩家产生交互
下面主要总结步骤1和3的关键点
一、把游戏里会出现的“物品”都摆进去并设置好
Game Object:核心!所有的其他东西都依托于Object,每个Object负责自己的功能,然后它们合作把游戏完成(这就是所谓的面向对象的编程吧)。
Empty Object:特殊的object,用作容器。可装物品,也可装逻辑。
Rigidbody:要用到物理机制就要加Rigidbody
关键属性 Use Gravity,Is Kinematic(不受物理力作用),Drag和Angular Drug(空气阻力)
Collider:有碰撞就要有Collider
有碰撞后反应就要勾Trigger;有多种mesh形式
Materials:textures转成materials再加到物体上(有待进一步学习)
Prefabs:拖到的prefabs文件夹下的物品就会变成prefab,会多次出现的物品适合做成prefab
二、脚本
基本结构(个人理解而已):
变量 --> 函数 --> 逻辑 --> API
1. 变量
public的是要引用某个物品的,或者要在inspector设定数值的
private的只在当前脚本中使用的
目前见到的数据类型有float、int、bool、GameObject、Rigidbody、Vector3、Text、GameController、Boundary、AudioSource (待研究)
引自http://my.oschina.net/u/1585857/blog/475674*变量名首字母通常小写
2. 函数
默认的四函数Start()、Update()、 FixedUpdate()、LateUpdate()(Awake暂时没接触)
其他自带函数OnTriggerEnter()、OnTriggerExit()(更多待了解)
unity自带函数会在预定条件下触发,自建函数则自行调用
自建函数:
通常不需要返回值的都是void
要在其他脚本中引用的就是public void
协程返回值是IEnumerator
*函数名通常首字母大写
3.逻辑
目前用到的有:if(){},for(;;){},while(){}
for和while会一直循环到结束才会跳出(没有跳出指令的话)
return:跳出函数并返回值
break:终止循环
和上面两个一套的应该还有一个continue,是跳过当前循环并开始循环的一次新迭代
参考:http://www.cnblogs.com/iceword/archive/2010/06/04/1751382.html
4. API
感觉unity真的是提供了好多好多的api啊,掌握unity的关键一步可能也就是熟悉这些api吧
目前用到过的:
获取组件
GetComponent<>()
Debug
Debug.Log()
Input系列
Input.GetAxis("Horizontal"); Input.GetAxis("Vertical")
Input.GetButton("")
Input.GetKeyDown (KeyCode. )
gameObject系列
物体名.gameObject.SetActive()
物体名.gameObject.CompareTag(" ")
GameObject.FindWithTag("...") 返回标有该tag的物体
Rigidbody系列
rb.AddForce() (rb是装rigidbody的变量名)
rb.rotation: rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * -tilt);
rb.velocity
rb.position
rb.angularVelocity
销毁物体
Destroy(xx.gameObject)
从prefab生成instance
Instantiate(原型,位置,旋转)
text系列
.text
.toString
数学函数集锦 mathf:
mathf.CLamp(,,)
Random系列
Random.Range(,)
Random.insideUnitSphere
协程函数等待
yield return new WaitForSeconds(...)
当前时间
Time.time
音频播放
audioSource.Play()
重新加载场景
Application.LoadLevel(Application.loadedLevel) 已废
用SceneManager 就可以啦
using UnityEngine.SceneManagement;
SceneManager.LoadScene(场景的build index);
5.其他
单独类的建立
类前要加[System.Serializable]
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
###最后 ,警惕 大小写!
2016.07.25 接下来准备找几个2D教程来看下