30天轻松学会unity自制游戏-敌机反击

敌机要反击跟Player设定差不了多少,首先也让敌机自动发射个子弹,找到素材把Enemy Bullet0~3拖曳到场景上,记得更改一下场景的图层Layer,看是要换图层还是把图层的层级往前…
https://ithelp.ithome.com.tw/upload/images/20210911/201405988jd6msmLyy.png
这颗子弹是从上往下,在Sprite Renderer里的Flip的Y打勾(这样这整副图的Y轴会颠倒,2D人物的左右翻转很常用这得X值),为了子弹动作流畅一点我把Animation最後一针复制一个(最後多停留一点点时间感觉比较顺畅) ,Tag也可敌机子弹一个自订的标签暂名EnemyBullet,再加上一个Collider给子弹,记得勾is Trigger,之後一样给子弹一个程序暂名EnemyBullet
https://ithelp.ithome.com.tw/upload/images/20210911/20140598vIOC7yQki1.png
https://ithelp.ithome.com.tw/upload/images/20210911/20140598xb6WAHhFwt.png
可以把之前的子弹程序稍微修改一点即可

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyBullet : MonoBehaviour
{
    private float speed = 5f;
    void Start()
    {
        Destroy(gameObject, 5);
    }

    // Update is called once per frame
    void Update()
    {
//原先的往上改成往下即可
        transform.Translate(Vector3.down * speed * Time.deltaTime, Space.World);
    }

}

接下来让敌机射出子弹,一样把敌机子弹做成预置物,在修改一下敌机程序放上去
https://ithelp.ithome.com.tw/upload/images/20210911/20140598a0SOaMoYAe.png
https://ithelp.ithome.com.tw/upload/images/20210911/20140598MdIeFJL1nl.png

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyAI : MonoBehaviour
{
    private Animator anim;
    [SerializeField] float speed = 3f;
    bool right;
    [SerializeField] float hp = 100f;
	//序列划一个物件名叫	enemyBullet(在unity记得放入欲置物的子弹)
    [SerializeField] GameObject enemyBullet = null;
    
    void Start()
    {
        right = true;
        anim = GetComponent<Animator>();
		//一秒後反覆2秒执行Attack
        InvokeRepeating("Attack", 1f, 2f);
    }

    // Update is called once per frame
    void Update()
    {
        Move();
    }
     void Move()
    {
        
        if (!right)
        { 
            transform.Translate(speed * -1 * Time.deltaTime, 0, 0);
            if (gameObject.transform.position.x <= 0.5)
            right = true;
        }
        if (right)
        { 
            transform.Translate(speed * 1 * Time.deltaTime, 0, 0);
            if (gameObject.transform.position.x >=5.5)
            right = false;
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        
        if(collision.tag == "PlayerBullet")
        {
            hp -= 5f;
            anim.SetTrigger("hit");
            if (hp <= 0)
                Destroy(gameObject);
        }
    }
    void Attack()
    {
		//创造一个(物件(enemyBullet),在自身位置,自身角度)
        Instantiate(enemyBullet, transform.position, Quaternion.identity);
    }

}

<<:  [13th][Day3] 容器两三事

>>:  [Day9] Vite 出小蜜蜂~撞击行为 Collision Behavior!

Fortinet 80F DMZ 问题

Fortinet 80F DMZ 问题 小弟公司刚刚换了fortinet 80f os 7.01 一...

[Day14] Kubernetes

昨天简介完了 Docker 的容器相关内容,今天我们要来介绍的是 Kubernetes (K8S),...

Day 14-假物件 (Fake) - 模拟物件 (Mock)-3 (核心技术-6)

只针对一个关注点测试 昨天提到虚设常式与模拟物件的差异,两者之间之差在验证的时候如果是用该假物件验证...

连续 30 天 玩玩看 ProtoPie - Day 13

今天延续昨天的文字输入,我们来做更多尝试。 讲者把昨天 Text > Input 做出来的 I...

第48天-学习 crontab 工作排程

今天进度 鸟哥私房菜 - 第十五章、例行性工作排程(crontab) 我在 Crontab.guru...