敌机要反击跟Player设定差不了多少,首先也让敌机自动发射个子弹,找到素材把Enemy Bullet0~3拖曳到场景上,记得更改一下场景的图层Layer,看是要换图层还是把图层的层级往前…
这颗子弹是从上往下,在Sprite Renderer里的Flip的Y打勾(这样这整副图的Y轴会颠倒,2D人物的左右翻转很常用这得X值),为了子弹动作流畅一点我把Animation最後一针复制一个(最後多停留一点点时间感觉比较顺畅) ,Tag也可敌机子弹一个自订的标签暂名EnemyBullet,再加上一个Collider给子弹,记得勾is Trigger,之後一样给子弹一个程序暂名EnemyBullet
可以把之前的子弹程序稍微修改一点即可
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);
}
}
接下来让敌机射出子弹,一样把敌机子弹做成预置物,在修改一下敌机程序放上去
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);
}
}
>>: [Day9] Vite 出小蜜蜂~撞击行为 Collision Behavior!
Fortinet 80F DMZ 问题 小弟公司刚刚换了fortinet 80f os 7.01 一...
昨天简介完了 Docker 的容器相关内容,今天我们要来介绍的是 Kubernetes (K8S),...
只针对一个关注点测试 昨天提到虚设常式与模拟物件的差异,两者之间之差在验证的时候如果是用该假物件验证...
今天延续昨天的文字输入,我们来做更多尝试。 讲者把昨天 Text > Input 做出来的 I...
今天进度 鸟哥私房菜 - 第十五章、例行性工作排程(crontab) 我在 Crontab.guru...