当前位置: 首页 > news >正文

合肥做网站公司哪家好昆明做网站seo

合肥做网站公司哪家好,昆明做网站seo,营销推广案例,html5网站源代码下载Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerStat using System.Collections; using System.Collections.Generi…Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerStat using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerStat : CharacterStats {private Player player;protected override void Start(){player GetComponentPlayer();base.Start();}public override void DoDamage(CharacterStats _targetStats){base.DoDamage(_targetStats);}protected override void TakeDamage(int _damage){base.TakeDamage(_damage);player.DamageEffect();}protected override void Die(){base.Die();player.Die();} }EnemyStat using System.Collections; using System.Collections.Generic; using UnityEngine;public class EnemyStat : CharacterStats {private Enemy enemy;public override void DoDamage(CharacterStats _targetStats){base.DoDamage(_targetStats);}protected override void Die(){base.Die();enemy.Die();}protected override void Start(){enemy GetComponentEnemy();base.Start();}protected override void TakeDamage(int _damage){base.TakeDamage(_damage);enemy.DamageEffect();} }Entity.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class Entity : MonoBehaviour {[Header(Knockback info)][SerializeField] protected Vector2 knockbackDirection;//被击打后的速度信息[SerializeField] protected float knockbackDuration;//被击打的时间protected bool isKnocked;//此值通过卡住SetVelocity函数的方式用来阻止当一个角色被攻击时会乱动的情况[Header(Collision Info)]public Transform attackCheck;//transform类代表的时物体的位置,用来控制攻击检测的位置public float attackCheckRadius;//检测半径[SerializeField] protected Transform groundCheck;//transform类代表的时物体的位置,后面会来定位子组件的位置 [SerializeField] protected float groundCheckDistance;[SerializeField] protected Transform wallCheck;//transform类代表的时物体的位置,后面会来定位子组件的位置 [SerializeField] protected float wallCheckDistance;[SerializeField] protected LayerMask whatIsGround;//LayerMask类与Raycast配合https://docs.unity3d.com/cn/current/ScriptReference/Physics.Raycast.html#region 定义Unity组件public SpriteRenderer sr { get; private set; }public Animator anim { get; private set; }//这样才能配合着拿到自己身上的animator的控制权public Rigidbody2D rb { get; private set; }//配合拿到身上的Rigidbody2D组件控制权public EntityFX fx { get; private set; }//拿到EntityFXpublic CharacterStats stats { get; private set; }public CapsuleCollider2D cd { get; private set; }#endregionpublic int facingDir { get; private set; } 1;protected bool facingRight true;//判断是否朝右protected virtual void Awake(){}protected virtual void Start(){anim GetComponentInChildrenAnimator();//拿到自己子组件身上的animator的控制权sr GetComponentInChildrenSpriteRenderer();fx GetComponentEntityFX();拿到的组件上的EntityFX控制权rb GetComponentRigidbody2D();stats GetComponentCharacterStats();cd GetComponentCapsuleCollider2D();}protected virtual void Update(){}protected virtual void Exit(){}public virtual void DamageEffect(){fx.StartCoroutine(FlashFX);//IEnumertor本质就是将一个函数分块执行只有满足某些条件才能执行下一段代码此函数有StartCoroutine调用//https://www.zhihu.com/tardis/bd/art/504607545?source_id1001StartCoroutine(HitKnockback);//调用被击打后产生后退效果的函数Debug.Log(gameObject.namewas damaged);}protected virtual IEnumerator HitKnockback(){isKnocked true;//此值通过卡住SetVelocity函数的方式用来阻止当一个角色被攻击时会乱动的情况rb.velocity new Vector2(knockbackDirection.x * -facingDir, knockbackDirection.y);yield return new WaitForSeconds(knockbackDuration);isKnocked false;}//被击打后产生后退效果的函数#region 速度函数Velocitypublic virtual void SetZeroVelocity(){if(isKnocked){return;}rb.velocity new Vector2(0, 0);}//设置速度为0函数public virtual void SetVelocity(float _xVelocity, float _yVelocity){if(isKnocked)return;此值通过卡住SetVelocity函数的方式用来阻止当一个角色被攻击时会乱动的情况rb.velocity new Vector2(_xVelocity, _yVelocity);//将rb的velocity属性设置为对应的想要的二维向量。因为2D游戏的速度就是二维向量FlipController(_xVelocity);//在其他设置速度的时候调用翻转控制器}//控制速度的函数此函数在其他State中可能会使用但仅能通过player.SeVelocity调用#endregion#region 翻转函数Flippublic virtual void Flip(){facingDir facingDir * -1;facingRight !facingRight;transform.Rotate(0, 180, 0);//旋转函数,transform不需要额外定义因为他是自带的}//翻转函数public virtual void FlipController(float _x)//目前设置x目的时能在空中时也能转身{if (_x 0 !facingRight)//当速度大于0且没有朝右时翻转{Flip();}else if (_x 0 facingRight){Flip();}}#endregion#region 碰撞函数Collisionpublic virtual bool IsGroundDetected(){return Physics2D.Raycast(groundCheck.position, Vector2.down, groundCheckDistance, whatIsGround);}//通过RayCast检测是否挨着地面,https://docs.unity3d.com/cn/current/ScriptReference/Physics2D.Raycast.html//xxxxxxxx() xxxxxxxx xxxxxxxxxx() return xxxxxxxxx;public virtual bool IsWallDetected(){return Physics2D.Raycast(wallCheck.position, Vector2.right * facingDir, wallCheckDistance, whatIsGround);}//通过RayCast检测是否挨着地面,https://docs.unity3d.com/cn/current/ScriptReference/Physics2D.Raycast.html//xxxxxxxx() xxxxxxxx xxxxxxxxxx() return xxxxxxxxx;protected virtual void OnDrawGizmos(){Gizmos.DrawLine(groundCheck.position, new Vector3(groundCheck.position.x, groundCheck.position.y - groundCheckDistance));//绘制一条从 from(前面的) 开始到 to后面的 的线。Gizmos.DrawLine(wallCheck.position, new Vector3(wallCheck.position.x wallCheckDistance, wallCheck.position.y));//绘制一条从 from(前面的) 开始到 to后面的 的线。Gizmos.DrawWireSphere(attackCheck.position, attackCheckRadius);//https://docs.unity3d.com/2022.3/Documentation/ScriptReference/Gizmos.DrawWireSphere.html//绘制具有中心和半径的线框球体。}//画图函数#endregionpublic void MakeTransprent(bool isClear){if (isClear)sr.color Color.clear;elsesr.color Color.white;}public virtual void Die(){} }Player.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine;public class Player : Entity {[Header(Attack Details)]public Vector2[] attackMovement;//每个攻击时获得的速度组public float counterAttackDuration .2f;public bool isBusy{ get; private set; }//防止在攻击间隔中进入move//[Header(Move Info)]public float moveSpeed;//定义速度与xInput相乘控制速度的大小public float jumpForce;public float swordReturnImpact;//在player里设置swordReturnImpact作为击退的参数[Header(Dash Info)][SerializeField] private float dashCooldown;private float dashUsageTimer;//为dash设置冷却时间在一定时间内不能连续使用public float dashSpeed;//冲刺速度public float dashDuration;//持续时间public float dashDir { get; private set; }#region 定义Statespublic PlayerStateMachine stateMachine { get; private set; }public PlayerIdleState idleState { get; private set; }public PlayerMoveState moveState { get; private set; }public PlayerJumpState jumpState { get; private set; }public PlayerAirState airState { get; private set; }public PlayerDashState dashState { get; private set; }public PlayerWallSlideState wallSlide { get; private set; }public PlayerWallJumpState wallJump { get; private set; }public PlayerDeadState deadState { get; private set; }public PlayerPrimaryAttackState primaryAttack { get; private set; }public PlayerCounterAttackState counterAttack { get; private set; }public PlayerAimSwordState aimSword { get; private set; }public PlayerCatchSwordState catchSword { get; private set; }public PlayerBlackholeState blackhole { get; private set; }public SkillManager skill { get; private set; }public GameObject sword{ get; private set; }//声明sword#endregionprotected override void Awake(){base.Awake();stateMachine new PlayerStateMachine();//通过构造函数在构造时传递信息idleState new PlayerIdleState(this, stateMachine, Idle);moveState new PlayerMoveState(this, stateMachine, Move);jumpState new PlayerJumpState(this, stateMachine, Jump);airState new PlayerAirState(this, stateMachine, Jump);dashState new PlayerDashState(this, stateMachine, Dash);wallSlide new PlayerWallSlideState(this, stateMachine, WallSlide);wallJump new PlayerWallJumpState(this, stateMachine, Jump);//wallJump也是Jump动画deadState new PlayerDeadState(this, stateMachine, Die);primaryAttack new PlayerPrimaryAttackState(this, stateMachine, Attack);counterAttack new PlayerCounterAttackState(this, stateMachine, CounterAttack);aimSword new PlayerAimSwordState(this,stateMachine, AimSword);catchSword new PlayerCatchSwordState(this, stateMachine, CatchSword);blackhole new PlayerBlackholeState(this, stateMachine, Jump);//this 就是 Player这个类本身}//Awake初始化所以State为所有State传入各自独有的参数及animBool以判断是否调用此动画与animatoin配合完成protected override void Start(){base.Start();stateMachine.Initialize(idleState);skill SkillManager.instance;}protected override void Update()//在mano中update会自动刷新但其他没有mano的不会故需要在这个updata中调用其他脚本中的函数stateMachine.currentState.update以实现 //stateMachine中的update{base.Update();stateMachine.currentState.Update();//反复调用CurrentState的Update函数CheckForDashInput();if(Input.GetKeyDown(KeyCode.F)){skill.crystal.CanUseSkill();}}public void AssignNewSword(GameObject _newSword)//保持创造的sword实例的函数{sword _newSword;}public void CatchTheSword()//通过player的CatchTheSword进入,及当剑消失的瞬间进入{stateMachine.ChangeState(catchSword);Destroy(sword);}public IEnumerator BusyFor(float _seconds)//https://www.zhihu.com/tardis/bd/art/504607545?source_id1001{isBusy true;yield return new WaitForSeconds(_seconds);isBusy false;}//p39 4.防止在攻击间隔中进入move,通过设置busy值在使用某些状态时使其为busy为true抑制其进入其他state//IEnumertor本质就是将一个函数分块执行只有满足某些条件才能执行下一段代码此函数有StartCoroutine调用public void AnimationTrigger() stateMachine.currentState.AnimationFinishTrigger();//从当前状态拿到AnimationTrigger进行调用的函数public void CheckForDashInput(){if (IsWallDetected()){return;}//修复在wallslide可以dash的BUGif (Input.GetKeyDown(KeyCode.LeftShift) skill.dash.CanUseSkill())//将DashTimer0 的判断 改成DashSkill里的判断{dashDir Input.GetAxisRaw(Horizontal);//设置一个值可以将dash的方向改为你想要的方向而不是你的朝向if (dashDir 0){dashDir facingDir;//只有当玩家没有控制方向时才使用默认朝向}stateMachine.ChangeState(dashState);}}//将Dash切换设置成一个函数使其在所以情况下都能使用public override void Die(){base.Die();stateMachine.ChangeState(deadState);} }PlayerDeadState.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerDeadState : PlayerState {public PlayerDeadState(Player _player, PlayerStateMachine _stateMachine, string _animBoolName) : base(_player, _stateMachine, _animBoolName){}public override void AnimationFinishTrigger(){base.AnimationFinishTrigger();}public override void Enter(){base.Enter();}public override void Exit(){base.Exit();}public override void Update(){base.Update();player.SetZeroVelocity();} }Enemy.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine;public class Enemy : Entity {[SerializeField] protected LayerMask whatIsPlayer;[Header(Stun Info)]public float stunnedDuration;//stunned持续时间public Vector2 stunnedDirection;//stunned改变后的速度protected bool canBeStunned;//判断是否可以被反击[SerializeField] protected GameObject counterImage;//一个代表着是否可以被反击的信号[Header(Move Info)]public float moveSpeed;public float idleTime;public float battleTime;//多久能从battle状态中退出来private float defaultMoveSpeed;[Header(Attack Info)]public float attackDistance;public float attackCooldown;//攻击冷却[HideInInspector] public float lastTimeAttacked;//最后一次攻击的时间#region 类public EnemyStateMachine stateMachine { get; private set; }public string lastingAnimBoolName{ get; private set; }public virtual void AssignLastAnimName(string _animBoolName){lastingAnimBoolName _animBoolName;}#endregionprotected override void Awake(){base.Awake();stateMachine new EnemyStateMachine();defaultMoveSpeed moveSpeed;}protected override void Start(){base.Start();}protected override void Update(){base.Update();stateMachine.currentState.Update();//Debug.Log(IsPlayerDetected().collider.gameObject.name I see);//这串代码会报错可能使版本的物体因为在没有找到Player的时候物体是空的NULL你想让他在控制台上显示就报错了}public virtual void FreezeTime(bool _timeFrozen){if(_timeFrozen){moveSpeed 0;anim.speed 0;}else{moveSpeed defaultMoveSpeed;anim.speed 1;}}protected virtual IEnumerator FreezeTimeFor(float _seconds){FreezeTime(true);yield return new WaitForSeconds(_seconds);FreezeTime(false);}#region Counter Attack Windowpublic virtual void OpenCounterAttackWindow()//打开可以反击的信号的函数{canBeStunned true;counterImage.SetActive(true);}public virtual void CloseCounterAttackWindow()//关闭可以反击的信号的函数{canBeStunned false;counterImage.SetActive(false);}#endregionpublic virtual bool CanBeStunned()//这里的主要目的是完成在被反击过后能立刻关闭提示窗口{if (canBeStunned){CloseCounterAttackWindow();return true;}return false;}public virtual void AnimationFinishTrigger() stateMachine.currentState.AnimationFinishTrigger();//动画完成时调用的函数与Player相同public virtual RaycastHit2D IsPlayerDetected() Physics2D.Raycast(wallCheck.position, Vector2.right * facingDir, 7, whatIsPlayer);//用于从射线投射获取信息的结构。//该函数的返回值可以变可以只返回bool也可以是碰到的结构protected override void OnDrawGizmos(){base.OnDrawGizmos();Gizmos.color Color.yellow;//把线改成黄色Gizmos.DrawLine(transform.position, new Vector3(transform.position.x attackDistance * facingDir, transform.position.y));//用来判别是否进入attackState的线}}Enemy_Skeleton.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class EnemyState {protected Enemy enemyBase;protected EnemyStateMachine stateMachine;protected Rigidbody2D rb;//小简化protected bool triggerCalled;private string animBoolName;protected float stateTimer;public EnemyState(Enemy _enemyBase, EnemyStateMachine _stateMachine, string _animBoolName){this.enemyBase _enemyBase;this.stateMachine _stateMachine;this.animBoolName _animBoolName;}public virtual void Enter(){triggerCalled false;enemyBase.anim.SetBool(animBoolName, true);rb enemyBase.rb;//小简化}public virtual void Update(){stateTimer - Time.deltaTime;}public virtual void Exit(){enemyBase.anim.SetBool(animBoolName, false);enemyBase.AssignLastAnimName(animBoolName);}//动画完成时调用的函数与Player相同public virtual void AnimationFinishTrigger(){triggerCalled true;} }EnemyState.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEditorInternal; using UnityEngine;public class Enemy_Skeleton : Enemy {#region 类Statepublic SkeletonIdleState idleState { get; private set; }public SkeletonMoveState moveState { get; private set; }public SkeletonBattleState battleState { get; private set; }public SkeletonAttackState attackState { get; private set; }public SkeletonStunnedState stunnedState { get; private set; }public SkeletonDeadState deadState { get; private set; }#endregionprotected override void Awake(){base.Awake();idleState new SkeletonIdleState(this, stateMachine, Idle, this);moveState new SkeletonMoveState(this,stateMachine, Move, this);battleState new SkeletonBattleState(this, stateMachine, Move, this);attackState new SkeletonAttackState(this, stateMachine, Attack, this);stunnedState new SkeletonStunnedState(this, stateMachine, Stunned, this);deadState new SkeletonDeadState(this, stateMachine, Idle, this);}protected override void Start(){base.Start();stateMachine.Initialize(idleState);}protected override void Update(){base.Update();}public override bool CanBeStunned(){if (base.CanBeStunned())//在这里重写主要是因为只有在Skeleton里面才能调用stunnedState{stateMachine.ChangeState(stunnedState);return true;}return false;}//重写后不仅能达成在完成被反击后关闭提示窗口还能转换为stunnedStatepublic override void Die(){base.Die();stateMachine.ChangeState(deadState);} }SkeletonDeadState.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class SkeletonDeadState : EnemyState {private Enemy_Skeleton enemy;public SkeletonDeadState(Enemy _enemyBase, EnemyStateMachine _stateMachine, string _animBoolName,Enemy_Skeleton _enemy) : base(_enemyBase, _stateMachine, _animBoolName){this.enemy _enemy;}public override void Enter(){base.Enter();enemy.anim.SetBool(enemy.lastingAnimBoolName, true);enemy.anim.speed 0;enemy.cd.enabled false;stateTimer .1f;}public override void Update(){base.Update();if (stateTimer 0)rb.velocity new Vector2(0, 10);} }
http://www.zqtcl.cn/news/180018/

相关文章:

  • 三木做网站学校网站的常规化建设
  • 短网址转换器seo网络运营
  • 汇邦团建网站谁做的郑州中心城区
  • 苏州瑞熙网站建设网站建设技术团队
  • 响应式 网站 开发百度投诉中心电话24个小时
  • 河南建设网站公司简介苏州建设网站价格
  • pc网站 手机网站电商小程序免费开店
  • 零基础学pytho 网站开发餐饮公司最好的网站建设
  • 品牌网站建设 蝌蚪5小微信分销怎么做
  • 二级域名建站虚拟主机与云服务器的区别
  • 如何安装网站模板文件网站维护具体做啥
  • 怎么建设官方网站登封网络推广公司
  • 苏州画廊网站建设vs2015 建设微网站
  • 海南网站建设及维护自己创建网站403
  • 网站推广的意义怎样把建好的网站上传到互联网
  • 王店镇建设中学网站seo搜索排名优化是什么意思
  • 北京哪家网站建设公司比较好js页面下载wordpress
  • 网站开发组岗位建设银行官网网站人事
  • 找公司做网站运营怎么样百度推广代运营
  • flask做克隆网站网站放到云服务器上怎么做
  • 有网站怎样做推广精品网站源码资源程序下载
  • 怎么建设淘宝联盟的网站梧州网站设计公司
  • 注册查询官方网站网站建设pad版本是什么
  • 做网站先得注册域名吗网站cdn+自己做
  • 甘肃省建设厅网站非织梦做的网站能仿吗
  • 天元建设集团网站苏州门户网站建设
  • 建设网站需要学习什么语言福州优化搜索引擎
  • 网站开发大致多少钱手机上怎么制作网站吗
  • 重庆网站seo营销模板wordpress学习 知乎
  • 桃子网站logowordpress post meta