项目实训2022

阅读: 评论:0

项目实训2022

项目实训2022

加入新版植物,火焰豌豆,伤害为基础植物两倍并带有溅射伤害

素材寻找

贴吧找到的火焰豌豆素材和火焰弹素材,不过是gif图,裁剪到合适比例,通过工具转换成帧图片,并且将击中僵尸的音频素材导入到项目资源中。

设置预制体

创建预制体火焰弹和豌豆,加入动画

代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BlazeBullet : MonoBehaviour
{private Rigidbody2D rigidbody;protected Animator animator;private SpriteRenderer spriteRenderer;// 攻击力private int attackValue;// 是否击中private bool isHit;public void Init(int attackValue,Vector2 pos){transform.position = pos;rigidbody = GetComponent<Rigidbody2D>();spriteRenderer = GetComponent<SpriteRenderer>();animator = GetComponent<Animator>();rigidbody.AddForce(Vector2.right*300);this.attackValue = avityScale = 0;isHit = false;}void Update(){if (isHit) return;if (transform.position.x>7.7F){// 销毁自身Invoke("Destroy", 0.5f);return;}}private void OnTriggerEnter2D(Collider2D coll){if (isHit) return;if (coll.tag == "Zombie"){isHit = true;// 播放僵尸被豌豆攻击的音效AudioManager.Instance.PlayEFAudio(GameManager.Instance.GameConf.FirePea);// 让范围内的僵尸受伤List<ZombieBase> zombies = ZombieManager.Instance.GetZombies(transform.position, 2f);if (zombies == null) return;for (int i = 0; i < zombies.Count; i++){zombies[i].Hurt(attackValue);}// 暂停自身的运动rigidbody.velocity = ;animator.Play("BlazeBulletHit");// 销毁自身Invoke("Destroy", 0.5f);}}private void Destroy(){// 取消延迟调用CancelInvoke();// 把自己放进缓存池PoolManager.Instance.PushObj(GameManager.Instance.GameConf.BlazeBullet, gameObject);}}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BlazePea : PlantBase
{public override float MaxHp{get{return 300;}}protected override float attackCD => 1.4f;protected override int attackValue => 40;// 是否可以攻击private bool canAttack;// 创建子弹的偏移量private Vector3 creatBulletOffsetPos = new Vector2(0.562f, 0);protected override void OnInitForPlace(){canAttack = true;// 可能要攻击InvokeRepeating("Attack", 0, 0.2f);}/// <summary>/// 攻击方法-循环检测/// </summary>private void Attack(){if (canAttack == false) return;// 从僵尸管理器 获取一个离我最近的僵尸ZombieBase zombie = ZombieManager.Instance.GetZombieByLineMinDistance((int)currGrid.Point.y, transform.position);// 没有僵尸 跳出if (zombie == null) return;// 僵尸必须在草坪上 否则跳出if (zombie.CurrGrid.Point.x == 8 && Vector2.ansform.position, zombie.CurrGrid.Position) > 1.5f) return;// 如果僵尸不在我的左边,也跳出if (ansform.position.x < transform.position.x) return;// 从这里开始,都是可以正常攻击的// 在枪口实例化一个子弹BlazeBullet bullet = PoolManager.Instance.GetObj(GameManager.Instance.GameConf.BlazeBullet).GetComponent<BlazeBullet>();ansform.SetParent(transform);bullet.Init(attackValue, transform.position + creatBulletOffsetPos);CDEnter();canAttack = false;}/// <summary>/// 进入CD/// </summary>private void CDEnter(){StartCoroutine(CalCD());}/// <summary>/// 计算冷却时间/// </summary>IEnumerator CalCD(){yield return new WaitForSeconds(attackCD);canAttack = true;}
}

本文发布于:2024-01-28 18:00:27,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064360319237.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实训   项目
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23