Unity 飞机大战(一)

(一)游戏背景

创建两个Quad用来做背景,主相机设置为正交镜头。

Unity 飞机大战(一)_第1张图片

 给背景添加脚本让其向下运动,使得看上去飞机在往前飞。并且背景能够一直循环。

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);
    }

 

你可能感兴趣的:(Unity)