(一)游戏背景
创建两个Quad用来做背景,主相机设置为正交镜头。
给背景添加脚本让其向下运动,使得看上去飞机在往前飞。并且背景能够一直循环。
void GroundMove()
{
transform.position = new Vector3(0, 0, -Mathf.Repeat(Time.time * _Speed, 30f));
}
(二)玩家飞机运动
限制玩家飞机不飞出游戏边界。
void ClampPosition()
{
_rigidbody.position = new Vector3(Mathf.Clamp(_rigidbody.position.x, _Boundary._xMin, _Boundary._xMax),
_rigidbody.position.y,
Mathf.Clamp(_rigidbody.position.z, _Boundary._zMin, _Boundary._zMax));
}
飞机左右移动时,飞机会左右倾斜
void Rotate()
{
_rigidbody.rotation = Quaternion.Euler(new Vector3(0, 0, -_rigidbody.velocity.x * _RotationAngle / _Speed));
}
控制飞机移动
void ClampPosition()
{
_rigidbody.position = new Vector3(Mathf.Clamp(_rigidbody.position.x, _Boundary._xMin, _Boundary._xMax),
_rigidbody.position.y,
Mathf.Clamp(_rigidbody.position.z, _Boundary._zMin, _Boundary._zMax));
}
(三)玩家子弹运动
因为玩家和敌人都能发射子弹,所以在玩家的子弹脚本里,使用virtual以便以后给子弹运动方法重写。
protected void Shoot()
{
_rigidbody = GetComponent();
Move();
}
public virtual void Move()
{
_rigidbody.velocity = Vector3.forward * _Speed;
}
(四)玩家飞机发射子弹
鼠标左键射击,按住不松,并且每隔一个时间间断发射子弹。同时还有射击音效。
将子弹设置为预制体,射击时进行实例化。给玩家飞机添加AudioSource组件。
void Fire()
{
_cd += Time.deltaTime;
if (Input.GetMouseButton(0) && _cd > _CD)
{
_cd = 0;
Instantiate(_Bullet, _FirePosition.position, Quaternion.identity);
_audioSource.Play();
}
}
(五)边界清除
将子弹和以后会做的陨石和敌机在飞出边界后会被Destroy
private void OnTriggerExit(Collider collider)
{
Destroy(collider.gameObject);
}