0
点赞
收藏
分享

微信扫一扫

从零开始的unity2d写游戏2#

古月无语 2022-04-02 阅读 74
c#unity

生成敌人

构想是在方块中间3*3区域随机生成,因为生成是放在update里的,不能让他疯狂生成,要加条件

 于是想把生成条件设为player每次落地时,那么就不能连续移动,必须等player停在墙上先。

在上一章的move.cs里面添加一个状态码,初始值为2,在判断里加上rdy ==0,并且在飞行时设为rdy=1

public static int rdy = 2;//设置player状态:2(落地),1(飞行中),0(待发射)


if (Input.GetMouseButtonDown(0) && rdy==0 )
        {            
            rb2D.velocity = direction * movespeed;
            rdy = 1;
        }

 那碰撞到墙也要加入rdy=2

private void OnCollisionEnter2D(Collision2D collision)//碰撞器检测函数
    {
        //Debug.Log(collision.gameObject.tag);
        if (collision.gameObject.tag == "wall" )
        {
            Vector2 tp = rb2D.velocity;
            //撞墙停止
            rb2D.velocity = tp.normalized * 0f;
            rdy = 2;
            //效果不好,注释掉
            //rb2D.velocity = Vector2.zero;
        }
        
    }

 

 制作了一个敌人预置体

加了一个碰撞盒,把is trigger勾上,想法是能穿过它

要在每次点击鼠标都增加一次times记录游戏流程

生成数量则设置成一个2为底的对数,能让敌人数量随着游戏流程逐渐变多。

public class enemy : MonoBehaviour
{
    //预制体生成
    //次数
    //敌人数量
    //敌人最大数量
    public GameObject[] EnemyPrefab;
    int times = 0;
    int enemyAmount = 1;
    int maxenemy = 11;
    // Start is called before the first frame update
    void Start()
    {
        
    }
    // Update is called once per frame
    void Update()
    {
        enemyproduce();
        //Debug.Log(times+";"+enemyAmount);//控制台显示次数与敌人数量
    }
    void enemyproduce()//生成敌人
    {
        //生成条件为player落地
        if (move.rdy == 2)
        {
            
            //生成敌人数量
            for (int i = 0; i < enemyAmount; i++)
            {
                enemyrandom();
            }
            //状态设为待发射
            //生成次数
            //生成敌人的数量为log2为底times+1的对数
            move.rdy = 0;
            times++;
            if (enemyAmount < maxenemy) { 
                enemyAmount = Mathf.FloorToInt(Mathf.Log(times + 1, 2));
            }
            
        }
    }//生成敌人end

当然,我的player碰到了就要摧毁

OnTriggerEnter2D 触发器

private void OnTriggerEnter2D(Collider2D collision)
    {
        
        if(collision.gameObject.tag == "enemy")
        {
            Destroy(collision.gameObject);
           
        }
    }

 

 效果

 飞过去之后↓生成新的,旧的消失

 

 

举报

相关推荐

0 条评论