您的位置:首页 > 移动开发 > Unity3D

unity2d创建一个随机方向运动对象

2015-12-13 16:24 597 查看
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函数中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d