Unity2D教程:添加敌人、简单动画、动画结束后销毁对象

关注专栏,持续更新哦

教程总目录


添加敌人

  • 添加一个敌人
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第1张图片

  • 加上Collider 2D用OnCollisionEnter2D来给予伤害,这些都比较简单不仔细说了。

private void OnCollisionEnter2D(Collision2D collision)
    {
        Player p = Helper.GetPlayerByCollision2D(collision);
        if (p == null) return;
        p.HealthChange(-damege);
    }
  • 加一个感叹号标志,如果Player进入攻击范围后就在怪的头上生成一个,并且自带动画。
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第2张图片

简单动画

  • 在Assets下创建Animation文件夹。并在内部创建一个Animator Controller,并拖到对象上。
    在这里插入图片描述

  • 此时会自动产生一个Animator组件
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第3张图片

  • 按Ctrl+6打开Animation编辑器,再在场景中选中要添加动画的对象(感叹号)。再Create一个动画。
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第4张图片

  • 显示需要关键帧的帧数。这个Sample Rate表示一秒钟需要多少帧,而我们可以编辑的帧数与之无关。例如Sample=10,而我编辑前面5帧,相当于是一秒钟播放两遍。
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第5张图片

  • 通过Add Property选择要使用的效果。
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第6张图片

  • 可以搞出012三帧,第0帧Scale全是0,第2帧Scale为预期大小(自己调试),第1帧比第2帧大些。一个先变大后缩回去的动画就做好了。

  • 回到Animator,发现此时以及自动创建了一个对应的状态机(可以自己右键创建,并将motion改为刚才搞好的动画。)
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第7张图片
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第8张图片

  • 由于放完动画后结束不能循环,所以设置动画的Loop Time
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第9张图片

动画结束后销毁对象

  • 我们希望感叹号的动画播放后销毁这个感叹号。

  • 我们可以利用StateMachine的behavior来实现。

  • Animator添加一个bool参数isEnd
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第10张图片

  • 让刚才的状态机指向新的状态机
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第11张图片

  • 对刚才的状态机添加behavior
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第12张图片

  • 在OnStateExit里面(状态机转到其他状态机时触发)通过SetBool修改isEnd的值。
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第13张图片

  • 感叹号的脚本里用update检测isEnd是否为真,如果是就销毁
    Unity2D教程:添加敌人、简单动画、动画结束后销毁对象_第14张图片

  • 但是这个办法需要额外挂载脚本且设置的比较麻烦,如果知道了动画的时间可以直接在创建后Destory(obj,time)来倒计时销毁。

敌人添加感叹号

检测和Player的距离,如果小于攻击范围就用Instantiate生成一个感叹号(需要测量相对位置)。

public GameObject exclamation;
void Update()
{
    if (!wantAttack)
    {
        float dis = Helper.GetDistance(Player.GetComponent<Transform>().position, transform.position);
        // Debug.Log(dis);
        if (dis <= attackRange)
        {
            wantAttack = true;
            Vector2 pos = (Vector2)transform.position + new Vector2(0.5f, 0.55f);
            GameObject exc = Instantiate(exclamation, pos, Quaternion.identity);
            exc.transform.localScale = new Vector3(2.7f, 2.2f, 0.7f);
        }
    }
}

你可能感兴趣的:(Unity2D教程,Unity)