从零开始的unity2d写游戏2#

本文介绍了在2D游戏中如何控制玩家状态来触发敌人生成,并通过碰撞检测实现玩家与墙的交互。玩家落地时,敌人会在3*3区域内随机生成,数量基于游戏流程的对数增长。当玩家碰到敌人时,敌人会立即销毁。此外,还设置了敌人预制体并使用触发器进行碰撞检测。
摘要由CSDN通过智能技术生成

生成敌人

构想是在方块中间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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值