unity学习笔记

一、标签 Tags

标签是Unity中用于标识游戏对象的字符串。通过为游戏对象添加标签,我们可以轻松地识别和区分不同类型的对象。例如,可以将玩家、敌人、道具等不同类型的游戏对象分别赋予不同的标签。

如何使用标签:

unity学习笔记_第1张图片

选择对象 选择想要添加标签的游戏对象。

Inspector视图: 在Inspector视图中,可以找到一个叫做"Tag"的下拉菜单。

选择标签: 点击下拉菜单,选择或创建一个标签,或者从现有的标签中选择一个。

示例:标签与触发器的混合使用

让子弹接触到不同的标签的物体,产生不同的效果

首先创建如下标签:

unity学习笔记_第2张图片

在脚本中写好触发的框架

 private void OnTriggerEnter2D(Collider2D collision)
    {
        switch (collision.tag)
        {
            case "Tank":
                break;
            case "Heart":
                break;
            case "Enemy":
                break;
            case "Wall":
                break;
            case "Barrier":
                break;
            default:break;
        }
    }

现在为每一个标签写入不同的方法

对于Tank 标签,当子弹接触到玩家后,玩家将被销毁销毁,写一个dieTank方法。

public void dieTank()
    {
        //产生爆炸特效
        Instantiate(explosionPrefab, transform.position,transform.rotation);
        //销毁
        Destroy(gameObject);

    }

对于敌人标签,拥有敌人标签的他们相互的子弹是不能相互销毁的。

设置一个布尔值用来区分不同的子弹

public bool isPlayerBullect;
 

当子弹触碰到墙时直接销毁,自身也要销毁。

Destroy(collision.gameObject);
Destroy(gameObject);

当触碰到障碍物时直接销毁子弹。

Destroy(gameObject)

当子弹触发到Herat,将会销毁该物体,并更换销毁后的图片

public void Die()
    {
        sr.sprite = BrokenSprite;
    }

collision.SendMessage("Die");

最后代码:

private void OnTriggerEnter2D(Collider2D collision)
    {
        switch (collision.tag)
        {
            case "Tank":
                if (!isPlayerBullect)
                {
                   collision.SendMessage("dieTank");
                }
                break;
            case "Heart":
                collision.SendMessage("Die");
                break;
            case "Enemy":
                break;
            case "Wall":
                Destroy(collision.gameObject);
                Destroy(gameObject);
                break;
            case "Barrier":
                Destroy(gameObject);
                break;
            default:break;
        }
    }

当子弹接触到不同类型的标签时,会产生不同的效果。

二、游戏中敌人的自动逻辑

为敌人的攻击逻辑加一个时间间隔,每隔一段时间自动进行攻击。

    void Update()
    {
        

        if (time > 3f)
        {
            attack();
        }
        else
        {
            time += Time.deltaTime;
        }

    }

每三秒进行一次攻击,不到三秒就进行累加。

然后敌人的移动可以联想到玩家的移动,玩家的移动是通过键盘输入方向键来控制的,我们只需要随机获取到方向键然后再赋值即可。

首先重新定义一个计时器用于改变方向

private float timeValChangeDirection = 4;

写一个用于自动获取方向并移动的方法。

private void Move()
    {

        if (timeValChangeDirection > 4)
        {
            int num = Random.Range(0, 8);
            if (num >= 5)
            {
                h = 0;
                v = -1;
            }else if (num == 4)
            {
                h = 0;
                v = 1;
            }else if (num >= 2 && num <=3)
            {
                h = 1;
                v = 0;
            }else if (num < 2)
            {
                h = -1;
                v = 0;
            }
            timeValChangeDirection = 0;

        }
        else
        {
            timeValChangeDirection += Time.fixedDeltaTime;
        }
        transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
        if (h < 0)
        {
            sr.sprite = tankSprite[3];
        }
        else if (h > 0)
        {
            sr.sprite = tankSprite[1];
        }
        if (h != 0)
        {
            return;
        }

        transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
        if (v < 0)
        {
            sr.sprite = tankSprite[2];
        }
        else if (v > 0)
        {
            sr.sprite = tankSprite[0];
        }
    }

这个是每四秒获取一个随机数值,根据随机数值来获取H,v的值,通过这个值来让坦克移动,

并且每次获取方向的数值后都要将 timeValChangeDirection 重置为零防止多次改变方向。

你可能感兴趣的:(学习,笔记)