室内设计师常去的网站,云县网站建设,南京蓝牙app开发公司,自己怎么做免费网站Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili
IceAndFire_Controller.cs
using System.Collections;
using System.Coll…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.GetComponentEnemy()! null){PlayerStats playerStats PlayerManager.instance.player.GetComponentPlayerStats();EnemyStats enemyTarget collision.GetComponentEnemyStats(); 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.GetComponentPlayer().primaryAttack.comboCounter 2;//设置第三下平a产生火球if (thirdAttack)//设置第三下平a产生火球{GameObject newIceAndFire Instantiate(iceAndFirePrufab, _respawPosition.position, player.transform.rotation);//使火球旋转方向与player对齐newIceAndFire.GetComponentRigidbody2D().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.timecomboWindowlastTimeAttacked)//当计数器超过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);//给角色初速度让角色在攻击触发时移动一点stateTimer .1f;}public override void Exit(){base.Exit();player.StartCoroutine(BusyFor, .15f);comboCounter;lastTimeAttacked Time.time;}public override void Update(){base.Update();if(stateTimer0){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 GetComponentInParentPlayer();//获得夫组件上的实际存在的Player组件private void AnimationTrigger(){player.AnimationTrigger();}private void AttackTrigger(){Collider2D[] colliders Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius);//创建一个碰撞器组保存所有圈所碰到的碰撞器//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.GetComponentEnemy()!null){EnemyStats _target hit.GetComponentEnemyStats();if(_target ! null)//修复无敌人时触发DoDamge出错的bugplayer.stats.DoDamage(_target);//提供一个可以从player调用敌人受伤函数的入口通过传入受伤敌人的组件if(Inventory.instance.GetEquipment(EquipmentType.Weapon) ! null)Inventory.instance.GetEquipment(EquipmentType.Weapon).Effect(_target.transform);// hit.GetComponentEnemy().DamageImpact();}}}private void ThrowSword(){SkillManager.instance.sword.CreateSword();}
}