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

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函数中。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值