using UnityEngine;
using System.Collections;
public class swan : MonoBehaviour {
public Rigidbody2D prop;
public float leftSpawnPosX;//表示左右所能达到的左右边界值
public float rightSpawnPosX;
public float minSpawnPosY;//随机生成的天鹅的Y值的边界值
public float maxSpawnPosY;
// public float minTimeBetweenSpawns;//随机生成天鹅的时间间隔值的最大最小值
// public float maxTimeBetweenSpawns;
public float minSpeed;
public float maxSpeed;
private Rigidbody2D spawn;
private bool facingLeft;
// Use this for initialization
void Start () {
facingLeft = Random.Range (0.0f, 2.0f) > 1;//facingLeft为一个bool变量,表示天鹅是否向左飞行,随机生成一个0-2的数字,若大于一则为真
float posX = facingLeft?rightSpawnPosX:leftSpawnPosX;
float posY = Random.Range (minSpawnPosY, maxSpawnPosY);
Vector3 swanPos = new Vector3 (posX, posY, transform.position.z);
spawn = Instantiate (prop, swanPos, Quaternion.identity) as Rigidbody2D;
if (!facingLeft) {//设置spawn的朝向,若其朝右则将scale的x值取为负数
Vector3 scale = spawn.transform.localScale;
scale.x *= -1;
spawn.transform.localScale = scale;
}
float Speed = Random.Range (minSpeed, maxSpeed);//设置spawn的速度,若其向左飞行,则将速度取负数
Speed *= facingLeft ? -1 : 1;
spawn.velocity = new Vector2 (Speed, 0);
}
// Update is called once per frame
void Update () {
if (spawn == null)//若spawn已经被销毁了,则要返回start()重新创建一个spawn
Start ();
if (facingLeft) {//当spawn飞离显示区域时,销毁spawn的gameObject对象
if (spawn.transform.position.x < leftSpawnPosX){
Destroy (spawn.gameObject);
}
} else {
if (spawn.transform.position.x > rightSpawnPosX){
Destroy (spawn.gameObject);
}
}
}
}
注:
1.要将spawn的预制体的sorting layer设置为background,order in layer设置的数字越大则显示越靠前。
2.要掌握各个函数中的调用关系。start函数只需要在场景加载时调用一次,而update函数是每一帧调用一次。由于检测spawn是否飞离的屏幕所显示区域需要每一帧都调用,所以写在update函数中。