做網站所用的技術推廣普通話的宣傳語
Alex教程每一P的教程原代碼加上我自己的理解初步理解寫的注釋,可供學習Alex教程的人參考
此代碼僅為較上一P有所改變的代碼
【Unity教程】從0編程制作類銀河惡魔城游戲_嗶哩嗶哩_bilibili
IceAndFire_Controller.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class IceAndFire_Controller : ThurderStrike_Controller
{protected override void OnTriggerEnter2D(Collider2D collision){base.OnTriggerEnter2D(collision);}
}
ThurderStrike_Controller.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ThurderStrike_Controller : MonoBehaviour
{protected virtual void OnTriggerEnter2D(Collider2D collision){if(collision.GetComponent<Enemy>()!= null){PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();EnemyStats enemyTarget = collision.GetComponent<EnemyStats>(); playerStats.DoMagicaDamage(enemyTarget);}}
}
IceAndFire_Effect.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;[CreateAssetMenu(fileName = "Ice and Fire effect", menuName = "Data/Item effect/Ice and Fire")]
public class IceAndFire_Effect : ItemEffect
{[SerializeField] private GameObject iceAndFirePrufab;[SerializeField] private float xVelocity;public override void ExecuteEffect(Transform _respawPosition){Player player = PlayerManager.instance.player;bool thirdAttack = player.GetComponent<Player>().primaryAttack.comboCounter == 2;//設置第三下平a產生火球if (thirdAttack)//設置第三下平a產生火球{GameObject newIceAndFire = Instantiate(iceAndFirePrufab, _respawPosition.position, player.transform.rotation);//使火球旋轉方向與player對齊newIceAndFire.GetComponent<Rigidbody2D>().velocity = new Vector2(xVelocity*player.facingDir,0);//獲得速度并使其朝向與player一致Destroy(newIceAndFire, 10);// 自動銷毀10秒}}
}
ThurderStrike_Effect.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;[CreateAssetMenu(fileName = "Thurder strike effect", menuName = "Data/Item effect/Thurder strike")]
public class ThurderStrike_Effect : ItemEffect
{[SerializeField] private GameObject thurderStrikePrefab;public override void ExecuteEffect(Transform _enemyPosition){GameObject newThurderStrike = Instantiate(thurderStrikePrefab,_enemyPosition.position,Quaternion.identity);Destroy(newThurderStrike, 1);}
}
PlayerPrimaryAttack.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerPrimaryAttackState : PlayerState
{//p38 2.從ground進入public int comboCounter { get; private set; }private float lastTimeAttacked;//距離上一次攻擊的時間private float comboWindow = 2;//可以間隔的時間public PlayerPrimaryAttackState(Player _player, PlayerStateMachine _stateMachine, string _animBoolName) : base(_player, _stateMachine, _animBoolName){}public override void Enter(){base.Enter();xInput = 0;//修復攻擊亂轉的問題if(comboCounter >2||Time.time>comboWindow+lastTimeAttacked)//當計數器超過2和間隔時間大于window時,進入第一個攻擊動作{comboCounter = 0;}player.anim.SetInteger("ComboCounter", comboCounter);//設置animtor里的comboCounter#region 選擇攻擊方向float attackDir = player.facingDir;if(xInput != 0){attackDir = xInput;}#endregion//使其能改變攻擊方向player.SetVelocity(player.attackMovement[comboCounter].x * attackDir, player.attackMovement[comboCounter].y);//給角色初速度,讓角色在攻擊觸發(fā)時移動一點stateTimer = .1f;}public override void Exit(){base.Exit();player.StartCoroutine("BusyFor", .15f);comboCounter++;lastTimeAttacked = Time.time;}public override void Update(){base.Update();if(stateTimer<0){player.SetZeroVelocity();}//1.修改移動時攻擊時后可以移動的BUG//2.但給了點時間模擬慣性可以動一點if (triggerCalled){stateMachine.ChangeState(player.idleState);}}
}
PlayerAnimationTrigger.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class playerAnimationTriggers : MonoBehaviour
{private Player player => GetComponentInParent<Player>();//獲得夫組件上的實際存在的Player組件private void AnimationTrigger(){player.AnimationTrigger();}private void AttackTrigger(){Collider2D[] colliders = Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius);//創(chuàng)建一個碰撞器組,保存所有圈所碰到的碰撞器//https://docs.unity3d.com/2022.3/Documentation/ScriptReference/Physics2D.OverlapCircleAll.htmlforeach(var hit in colliders)//https://blog.csdn.net/m0_52358030/article/details/121722077{if(hit.GetComponent<Enemy>()!=null){EnemyStats _target = hit.GetComponent<EnemyStats>();if(_target != null)//修復無敵人時觸發(fā)DoDamge出錯的bugplayer.stats.DoDamage(_target);//提供一個可以從player調用敵人受傷函數的入口,通過傳入受傷敵人的組件if(Inventory.instance.GetEquipment(EquipmentType.Weapon) != null)Inventory.instance.GetEquipment(EquipmentType.Weapon).Effect(_target.transform);// hit.GetComponent<Enemy>().DamageImpact();}}}private void ThrowSword(){SkillManager.instance.sword.CreateSword();}
}