(一)陨石运动
void Start()
{
_rigidbody = GetComponent<Rigidbody>();
_rigidbody.velocity = Vector3.back * _Speed;
_rigidbody.angularVelocity = Random.insideUnitSphere * _AngularVelocity;
}
(二)随机产生敌人
写一个字符串数组用来保存用来实例化的敌人预制体的名字。只要玩家飞机还存在,就每秒产生一个陨石或者敌机。
在Start()里面写一句 InvokeRepeating("SpawnEnemy", 0, 1);
void SpawnEnemy()
{
if (_player != null)
{
ObjectPool.GetGameObject(_enemy[Random.Range(0,_enemy.Length)]).transform.position = new Vector3(Random.Range(_player._Boundary._xMin, _player._Boundary._xMax), 10, 16);
}
}
(三)敌机运动
限制敌机不飞出边界,并且实现敌机能够左右移动。
void EnemyMove()
{
_speedX = Mathf.MoveTowards(_speedX, _targetX, Time.deltaTime * _Speed);
_rigidbody.velocity = new Vector3(_speedX, _rigidbody.velocity.y, _rigidbody.velocity.z);
ClampPosition();
}
void ClampPosition()
{
_rigidbody.position = new Vector3(Mathf.Clamp(_rigidbody.position.x, -7f, 7f),
_rigidbody.position.y, _rigidbody.position.z);
}
IEnumerator RandomX()
{
yield return new WaitForSeconds(0.5f);
while (true)
{
_targetX = Random.Range(1, _MaxOffset) * -Mathf.Sign(_rigidbody.position.x);
yield return new WaitForSeconds(Random.Range(_MinTime, _MaxTime));
_targetX = 0;
yield return new WaitForSeconds(Random.Range(_MinBackTime, _MaxBackTime));
}
}