Day02-太空大战之代码记录
1.关于Time.deltatime
Time是Unity提供的一个静态类,用来管理Unity程序中的时间的,deltatime是其重要的变量,表示每帧经过的时间。任何和动画效果相关的参数,如移动速度,旋转速度等,在使用前都要与该变量相乘.
2.模型,材质和贴图的基本关系
模型的表面质感是需要材质球来呈现的,贴图可以为材质提供不同的纹理表现。
3.移动函数
按住上下左右方向键,可以进行移动,如上键函数Input.Getkey(KeyCode.UpArrow),可以理解为,Input是一个静态类,封装了所有的输入功能,包括键盘鼠标,触控等。Input.GetKey是键盘输入,当这个函数的参数为KeyCode.UpArrow,这是时表示按住了上键返回值为1,否则为0;同理当这个函数的参数为KeyCode.DownArrow,表示下键,当这个函数的参数为KeyCode.LeftArrow和当这个函数的参数为KeyCode.RightArrow表示按下了左键和右键。关于距离的计算:
float movev=0;//水平距离
float moveh=0;//纵向距离
if(Input.Getkey(KeyCode.UpArrow))
moveh+=m_speed*Time.deltatime;
4.this.transform.Translate()
this.transform调用的是该游戏体的Transform组件,该组件包括移动,旋转,缩放等功能;调用其里头的Translate()移动函数.其参数就是一个x,y,z三个方向上的位置,如this.transform.Translate(new Vector3(moveh,0,movev));事实上,他实现的功能就是简单的向量加法,等同于this.transform.position+=new Vector3(moveh,0,movev);
5.不可见函数OnBecameInvisible()与可见函数OnBecameVisible()
该函数是unity自身的事件函数,当可渲染的物体离开可视范围,这个函数会自动触发。如子弹离开屏幕范围后被销毁。
void OnBecameInvisible()
{
if(this.enable)//先判断是否处以激活状态,防止重复删除。
Destroy(this.gameObject);//离开屏幕后销毁。
}
6.将飞船与子弹关联
已知子弹的prefabs,在飞船的脚本中添加public Transform m_rocket,即脚本的序列化;这时,飞船的Inspector面板下,脚本组件中会出现rocket这个属性,然后将子弹的prefab拖动至rocket中,这样就能完成飞船和子弹的关联
7.按键函数Input.GetKey(KeyCode.Space)和Input.GetMouseButton(0)
按下空格键或者按下鼠标左键(用来发射子弹),同上Keycode代表键盘,KeyCode.Space代表按下键盘的空格键;GetMouseButton(0)表示按下鼠标左键,同理GetMouseButton(1)表示鼠标右键
8.关于unity游戏体的实例化--Instantiate()函数
unity游戏体只能采用Instantiate函数实例化不能用new.
9.物理碰撞---游戏体之间的交互
组件位置,Physics--BoxCollider,IsTrigger选中,这样就具有触发作用。刚体组件:Physics--Rigidbody,取消重力,选中IsKinematic使游戏体的运动不受物理模拟的影响。然后,在用触发函数等等来实行碰撞。
交互:分别为各游戏体添加Tag组件。
触发函数:
OnTriggerEnter(Collider other)
{
if(other.tag=="xxx")//使用Tag来判断碰撞到谁
....
}
10. other.GetComponent<目的组件xx>()获得其他游戏体other的组件GetComponent当中的目标组件。
11.Quaternion是unity提供的一个静态,提供了很多和旋转有关的功能.Quaternion.LookRotation将根据一个方向返回旋转角度。
如Vector3 relativePos=m_player.position-transform.position;
Quaternion.LookRotation(relativePos);//该函数返回旋转角度
12.目标查找--基于Tag
GmaeObject obj=GameObject.FindGameObjectWithTag("player");//查找主角
13.声音组件Audio
添加声音组件Audio-Audio-Source.声音源组件(一个类),声音文件(作为类的函数的参数)
public AudioClip m_shootClip;//声音文件
public AudioSource m_audio;//声音源
m_audio=this.GetComponent<AudioSource>();//添加代码获取声音源组件
m_audio.PlayOneShot(m_shootClip);
14.协程函数声明IEnumerator A()
IEnumerator是C#的迭代器类型,在unity中可以用来声明协程函数,并且需要StartCoroutine(A)配合使用
15.UI界面
16.关卡跳转
17。世界坐标与本地坐标及坐标变换
首先,世界坐标是指物体在场景中的坐标,当某个物体没有父物体时,它的position即为世界坐标的position,rotation同理;本地坐标是物体相对于它的父物体的坐标而言( 父物体又套父物体的我还没有研究),这个相对坐标是以父物体本身为坐标轴进行计算的,与世界坐标没有必然联系。而对于没有父物体的物体,可以认为不存在本地坐标这种说法。另外有一点需要注意:当某个物体有父物体时,它的inspector栏transform中的position实际是localposition,即本地坐标。

浙公网安备 33010602011771号