unity精通之路01(SpaceShooter)02
创建小行星(主要学习预设体的克隆方法)
1)在Hierarchy视图中新建一个空的游戏对象Asteroid,重置其Transform组件。设置其Position为(0,0,10)。添加Rigidbody组件,取消勾选Use Gravity选项框。添加Capsule Collider组件,勾选Is Trigger选项。
2)从Project视图中拖动prop_asteroid_01到Asteroid对象上,使之成为Asteroid的子对象。
3)为了使碰撞体更接近2模型,调整其参数,Radius为0.5,Height为1.6,Direction的值为z轴。
添加小行星旋转功能
1)该功能主要用到随机函数Random,在脚本添加一个小行星旋转系数的变量tumble,再重载Start函数,为刚体组件角速度附上随机值
public float tumble=10.0f;
void Start(){
GetComponent< Rigidbody>().angularVelocity=Random.insideUnitSphere*tumble;
其中Random.insideUnitSphere表示单位长度半径球体内的一个随机点(向量),还要在Rigidbody组件上设置angular drag为0.
添加控制射击小行星的功能
添加脚本,代码如下:
void OnTriggerEnter(Collider other)
{
if(other.tag==“Boundary”)
return;
Destory(gameObject);
Destroy(other.gameObject);
}
添加小行星爆炸效果
打开脚本DestroyByContact进行编辑
public GameObject explosion;
public GameObject playerExplosion;
void OnTriggerEnter(Collider other)
{
…
Instantiate(explosion,transform.position,tansform.rotation);
if(other.tag==“Player”)
Instantiate(playerExplotion,other.transform.position,other.tansform.rotation);
…
}
接着把预设好的爆炸效果放到相应的变量上
添加小行星随机出现功能
1)把Asteroid对象从Hierarchy视图拖动到Project视图的Prefabs目录下,生成预制体Asteroid,然后将其从Hierarchy视图删除
2)在Project视图创建一个空的游戏对象GameController,重置其Transform组件,指定Tag为GameController。
3)在Project视图新建个脚本并附到GameController上
4)代码如下
public GameObjcet hazard;
public Vectoir3 spawnValues;
private Vector3 spawnPosition=Vector3.zero;
private Quaternion spawnRotation;
public int hazardCount;
void SpawnWaves()
{
for(int i=0;i<hazardCount;++i){
spawnPosition.x=Random.Range(-spawnValues.x,spawnValues.x);
spawnPosition.z=spawnValues.z;
spawnRotation=Quaternion.identity;
Instantiate(hazard,spawnPostion,spawnRotation);
}
}
void Start()
{
SpawnWaves();
}
5)添加一个变量spawnWait,用于表示每次生成小行星对象后延迟的时间,单位为秒。
public float spawnWait=1.0f;
更新原来的脚本
IEnumerator SpawnWaves()
{
yield return new WaitForSecond(startWait);
whwile (true) {
for(int i=0;i<hazardCount;++i)
{
…
}
yield return new W aitForSeconds
(spawnWait);
}
}
添加爆炸效果摧毁功能
创建个脚本绑定到爆炸粒子效果上
public float lifetime=2.0f;
void Start()
{
Destroy(gameObject,lifetime);
}