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

网站建设规划书总结怎么写电子商务网站建设课设学生体会

网站建设规划书总结怎么写,电子商务网站建设课设学生体会,手机怎么自己建网站,电影网站域名需要备案Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections.… Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting.Antlr3.Runtime.Misc; using UnityEngine; public enum StatType {strength,agility,intelligence,vitality,damage,critChance,critPower,Health,armor,evasion,magicResistance,fireDamage,iceDamage,lightingDamage } public class CharacterStats : MonoBehaviour {private EntityFX fx;[Header(Major stats)]public Stat strength; // 力量 增伤1点 爆伤增加 1% 物抗public Stat agility;// 敏捷 闪避 1% 闪避几率增加 1%public Stat intelligence;// 1 点 魔法伤害 1点魔抗 public Stat vitality;//加血的[Header(Offensive stats)]public Stat damage;public Stat critChance; // 暴击率public Stat critPower; //150% 爆伤[Header(Defensive stats)]public Stat Health;public Stat armor;public Stat evasion;//闪避值public Stat magicResistance;[Header(Magic stats)]public Stat fireDamage;public Stat iceDamage;public Stat lightingDamage;public bool isIgnited; // 持续烧伤public bool isChilded; // 削弱护甲 20%public bool isShocked; // 降低敌人命中率[SerializeField] private float ailmentsDuration 4;private float ignitedTimer;private float chilledTimer;private float shockedTimer;private float igniteDamageCooldown .3f;private float ignitedDamageTimer;private int igniteDamage;[SerializeField] private GameObject shockStrikePrefab;private int shockDamage;public System.Action onHealthChanged;//使角色在Stat里调用UI层的函数//此函数调用了更新HealthUI函数public bool isDead { get; private set; }private bool isVulnerable;//脆弱效果[SerializeField] public int currentHealth;protected virtual void Start(){critPower.SetDefaultValue(150);//设置默认爆伤currentHealth GetMaxHealthValue();fx GetComponentEntityFX();}public void MakeVulnerableFor(float _duration) StartCoroutine(VulnerableCorutine(_duration));//脆弱效果函数private IEnumerator VulnerableCorutine(float _duration){isVulnerable true;yield return new WaitForSeconds(_duration);isVulnerable false;}protected virtual void Update(){//所有的状态都设置上默认持续时间持续过了就结束状态ignitedTimer - Time.deltaTime;chilledTimer - Time.deltaTime;shockedTimer - Time.deltaTime;ignitedDamageTimer - Time.deltaTime;if (ignitedTimer 0)isIgnited false;if (chilledTimer 0)isChilded false;if (shockedTimer 0)isShocked false;//被点燃后出现多段伤害后点燃停止if(isIgnited)ApplyIgnitedDamage();}public virtual void IncreaseStatBy(int _modifier, float _duration,Stat _statToModify){StartCoroutine(StatModCoroutine(_modifier, _duration, _statToModify));}private IEnumerator StatModCoroutine(int _modifier, float _duration, Stat _statToModify){_statToModify.AddModifier(_modifier);yield return new WaitForSeconds(_duration);_statToModify.RemoveModifier(_modifier);}public virtual void DoDamage(CharacterStats _targetStats)//计算后造成伤害函数{if (TargetCanAvoidAttack(_targetStats))设置闪避{return;}int totleDamage damage.GetValue() strength.GetValue();//爆伤设置if (CanCrit()){totleDamage CalculateCriticalDamage(totleDamage);}totleDamage CheckTargetArmor(_targetStats, totleDamage);//设置防御_targetStats.TakeDamage(totleDamage);DoMagicaDamage(_targetStats); // 可以去了也可以不去}protected virtual void Die(){isDead true;}public virtual void TakeDamage(int _damage)//造成伤害是出特效{fx.StartCoroutine(FlashFX);//IEnumertor本质就是将一个函数分块执行只有满足某些条件才能执行下一段代码此函数有StartCoroutine调用//https://www.zhihu.com/tardis/bd/art/504607545?source_id1001DecreaseHealthBy(_damage);GetComponentEntity().DamageImpact();if (currentHealth 0 !isDead)Die();}public virtual void IncreaseHealthBy(int _amount)//添加回血函数{currentHealth _amount;if (currentHealth GetMaxHealthValue())currentHealth GetMaxHealthValue();if (onHealthChanged ! null)onHealthChanged();}protected virtual void DecreaseHealthBy(int _damage)//此函数用来改变当前生命值不调用特效{if (isVulnerable)_damage Mathf.RoundToInt(_damage * 1.1f);currentHealth - _damage;if (onHealthChanged ! null){onHealthChanged();}}#region Magical damage and ailementsprivate void ApplyIgnitedDamage(){if (ignitedDamageTimer 0 ){DecreaseHealthBy(igniteDamage);if (currentHealth 0 !isDead)Die();ignitedDamageTimer igniteDamageCooldown;}}被点燃后出现多段伤害后点燃停止public virtual void DoMagicaDamage(CharacterStats _targetStats)//法伤计算和造成元素效果调用的地方{int _fireDamage fireDamage.GetValue();int _iceDamage iceDamage.GetValue();int _lightingDamage lightingDamage.GetValue();int totleMagicalDamage _fireDamage _iceDamage _lightingDamage intelligence.GetValue();totleMagicalDamage CheckTargetResistance(_targetStats, totleMagicalDamage);_targetStats.TakeDamage(totleMagicalDamage);//防止循环在所有元素伤害为0时出现死循环if (Mathf.Max(_fireDamage, _iceDamage, _lightingDamage) 0)return;//让元素效果取决与伤害//为了防止出现元素伤害一致而导致无法触发元素效果//循环判断触发某个元素效果AttemptyToApplyAilement(_targetStats, _fireDamage, _iceDamage, _lightingDamage);}private void AttemptyToApplyAilement(CharacterStats _targetStats, int _fireDamage, int _iceDamage, int _lightingDamage){bool canApplyIgnite _fireDamage _iceDamage _fireDamage _lightingDamage;bool canApplyChill _iceDamage _lightingDamage _iceDamage _fireDamage;bool canApplyShock _lightingDamage _fireDamage _lightingDamage _iceDamage;while (!canApplyIgnite !canApplyChill !canApplyShock){if (Random.value .25f){canApplyIgnite true;Debug.Log(Ignited);_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);return;}if (Random.value .35f){canApplyChill true;Debug.Log(Chilled);_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);return;}if (Random.value .55f){canApplyShock true;Debug.Log(Shocked);_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);return;}}if (canApplyIgnite){_targetStats.SetupIgniteDamage(Mathf.RoundToInt(_fireDamage * .2f));}if (canApplyShock)_targetStats.SetupShockStrikeDamage(Mathf.RoundToInt(_lightingDamage * .1f));//给点燃伤害赋值_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);}//造成元素效果public void ApplyAilments(bool _ignite, bool _chill, bool _shock)//判断异常状态{bool canApplyIgnite !isIgnited !isChilded !isShocked;bool canApplyChill !isIgnited !isChilded !isShocked;bool canApplyShock !isIgnited !isChilded;//使当isShock为真时Shock里的函数仍然可以调用if (_ignite canApplyIgnite){isIgnited _ignite;ignitedTimer ailmentsDuration;fx.IgniteFxFor(ailmentsDuration);}if (_chill canApplyChill){isChilded _chill;chilledTimer ailmentsDuration;float slowPercentage .2f;GetComponentEntity().SlowEntityBy(slowPercentage, ailmentsDuration);fx.ChillFxFor(ailmentsDuration);}if (_shock canApplyShock){if(!isShocked){ApplyShock(_shock);}else{if (GetComponentPlayer() ! null)//防止出现敌人使玩家进入shock状态后也出现闪电return;HitNearestTargetWithShockStrike();}//isShock为真时反复执行的函数为寻找最近的敌人创建闪电实例并传入数据}}public void ApplyShock(bool _shock){if (isShocked)return;isShocked _shock;shockedTimer ailmentsDuration;fx.ShockFxFor(ailmentsDuration);}//触电变色效果private void HitNearestTargetWithShockStrike(){Collider2D[] colliders Physics2D.OverlapCircleAll(transform.position, 25);//找到环绕自己的所有碰撞器float closestDistance Mathf.Infinity;//正无穷大的表示形式只读Transform closestEnemy null;//https://docs.unity3d.com/cn/current/ScriptReference/Mathf.Infinity.htmlforeach (var hit in colliders){if (hit.GetComponentEnemy() ! null Vector2.Distance(transform.position, hit.transform.position) 1)// 防止最近的敌人就是Shock状态敌人自己{float distanceToEnemy Vector2.Distance(transform.position, hit.transform.position);//拿到与敌人之间的距离if (distanceToEnemy closestDistance)//比较距离如果离得更近保存这个敌人的位置,更改最近距离{closestDistance distanceToEnemy;closestEnemy hit.transform;}}if (closestEnemy null)closestEnemy transform;}if (closestEnemy ! null){GameObject newShockStrike Instantiate(shockStrikePrefab, transform.position, Quaternion.identity);newShockStrike.GetComponentShockStrike_Controller().Setup(shockDamage, closestEnemy.GetComponentCharacterStats());}}//给最近的敌人以雷劈public void SetupIgniteDamage(int _damage) igniteDamage _damage;//给点燃伤害赋值public void SetupShockStrikeDamage(int _damage) shockDamage _damage;//雷电伤害赋值#endregion#region Stat calculationsprivate int CheckTargetResistance(CharacterStats _targetStats, int totleMagicalDamage)//法抗计算{totleMagicalDamage - _targetStats.magicResistance.GetValue() (_targetStats.intelligence.GetValue() * 3);totleMagicalDamage Mathf.Clamp(totleMagicalDamage, 0, int.MaxValue);return totleMagicalDamage;}private static int CheckTargetArmor(CharacterStats _targetStats, int totleDamage)//防御计算{//被冰冻后角色护甲减少if (_targetStats.isChilded)totleDamage - Mathf.RoundToInt(_targetStats.armor.GetValue() * .8f);elsetotleDamage - _targetStats.armor.GetValue();totleDamage Mathf.Clamp(totleDamage, 0, int.MaxValue);return totleDamage;}public virtual void OnEvasion(){}//可继承成功闪避触发的函数private bool TargetCanAvoidAttack(CharacterStats _targetStats)//闪避计算{int totleEvation _targetStats.evasion.GetValue() _targetStats.agility.GetValue();//我被麻痹后//敌人的闪避率提升if (isShocked)totleEvation 20;if (Random.Range(0, 100) totleEvation){_targetStats.OnEvasion();return true;}return false;}private bool CanCrit()//判断是否暴击{int totleCriticalChance critChance.GetValue() agility.GetValue();if (Random.Range(0, 100) totleCriticalChance){return true;}return false;}private int CalculateCriticalDamage(int _damage)//计算暴击后伤害{float totleCirticalPower (critPower.GetValue() strength.GetValue()) * .01f;float critDamage _damage * totleCirticalPower;return Mathf.RoundToInt(critDamage);//返回舍入为最近整数的}public int GetMaxHealthValue(){return Health.GetValue() vitality.GetValue() * 10;}//统计生命值函数public Stat GetStats(StatType _statType){if (_statType StatType.strength) return strength;else if (_statType StatType.agility) return agility;else if (_statType StatType.intelligence) return intelligence;else if (_statType StatType.vitality) return vitality;else if (_statType StatType.damage) return damage;else if (_statType StatType.critChance) return critChance;else if (_statType StatType.critPower) return critPower;else if (_statType StatType.Health) return Health;else if (_statType StatType.armor) return armor;else if (_statType StatType.evasion) return evasion;else if (_statType StatType.magicResistance) return magicResistance;else if (_statType StatType.fireDamage) return fireDamage;else if (_statType StatType.iceDamage) return iceDamage;else if (_statType StatType.lightingDamage) return lightingDamage;return null;}#endregion } Sword_Skill_Controller.cs using System.Collections; using System.Collections.Generic; using Unity.Burst.CompilerServices; using UnityEngine;public class Sword_Skill_Controller : MonoBehaviour {private float returnSpeed;private bool isReturning;private Animator anim;private Rigidbody2D rb;private CircleCollider2D cd;private Player player;private bool canRotate true;private float freezeTimeDuration;[Header(Piece info)][SerializeField] float pierceAmount;[Header(Bounce info)]private float bounceSpeed;//设置弹跳速度private bool isBouncing;//判断是否可以弹跳private int bounceAmount;//弹跳的次数public ListTransform enemyTargets;//保存所有在剑范围内的敌人的列表private int targetIndex;//设置targetIndex作为敌人计数器[Header(Spin info)]private float maxTravelDistance;//最大攻击距离private float spinDuration;//持续时间private float spinTimer;//计时器private bool wasStopped;//是否停止private bool isSpinning;private float hitTimer;private float hitColldown;private float spinDirection;//用来不断推进剑在x轴上移动的值private void Awake(){anim GetComponentInChildrenAnimator();rb GetComponentRigidbody2D();cd GetComponentCircleCollider2D();}private void DestroyMe(){Destroy(gameObject);}public void ReturnSword(){rb.constraints RigidbodyConstraints2D.FreezeAll;//修复剑只要不触碰到物体就无法收回的bug//rb.isKinematic false;transform.parent null;isReturning true;}public void SetupSword(Vector2 _dir,float _gravityScale,Player _player,float _freezeTimeDuration,float _returnSpeed){player _player;rb.velocity _dir;rb.gravityScale _gravityScale;freezeTimeDuration _freezeTimeDuration;returnSpeed _returnSpeed;if(pierceAmount 0)anim.SetBool(Rotation, true); //其次在pierceAmount 0时不启动旋转动画spinDirection Mathf.Clamp(rb.velocity.x, -1, 1);用来不断推进剑在x轴上移动的值//Mathf.Clamp,当剑使向右飞的时候direction为1反之为-1//https://docs.unity3d.com/cn/current/ScriptReference/Mathf.Clamp.htmlInvoke(DestroyMe,7);//在一定时间后自动销毁剑}public void SetupBounce(bool _isBouncing,int _bounceAmount,float _bounceSpeed){isBouncing _isBouncing;bounceAmount _bounceAmount;bounceSpeed _bounceSpeed;}public void SetupPierce(int _pierceAomunt){pierceAmount _pierceAomunt;}public void SetupSpin(bool _isSpinning, float _maxTravelDistance,float _spinDuration,float _hitCooldown){isSpinning _isSpinning;maxTravelDistance _maxTravelDistance;spinDuration _spinDuration;hitColldown _hitCooldown;}private void Update(){if (canRotate)transform.right rb.velocity;//使武器随着速度而改变朝向if (isReturning){transform.position Vector2.MoveTowards(transform.position, player.transform.position, returnSpeed * Time.deltaTime);//从原来的位置返回到player的位置//并且随着时间增加而增加速度if (Vector2.Distance(transform.position, player.transform.position) 1)//当剑与player的距离小于一定距离清除剑{player.CatchTheSword();}}BounceLogic();SpinLogic();}private void SpinLogic(){if (isSpinning)//首先当isSpining为true才可进入{if (Vector2.Distance(player.transform.position, transform.position) maxTravelDistance !wasStopped)//当剑与角色到达最大攻击距离stop为true停止剑运动给剑一个倒计时{StopWhenSpinning();}if (wasStopped)//当stop为true倒计时过了回归角色{spinTimer - Time.deltaTime; //spinDirection一直是1或者-1但position是变化的transform.position Vector2.MoveTowards(transform.position, new Vector2(transform.position.x spinDirection, transform.position.y), 1.5f * Time.deltaTime);//让剑在x轴上移动的函数if (spinTimer 0){isReturning true;isSpinning false;}hitTimer - Time.deltaTime;if (hitTimer 0){hitTimer hitColldown;Collider2D[] colliders Physics2D.OverlapCircleAll(transform.position, 1);foreach (var hit in colliders){if (hit.GetComponentEnemy() ! null){hit.GetComponentEnemy().DamageImpact();}}}}}}private void StopWhenSpinning(){wasStopped true;rb.constraints RigidbodyConstraints2D.FreezeAll;spinTimer spinDuration;}private void BounceLogic(){if (isBouncing enemyTargets.Count 0){transform.position Vector2.MoveTowards(transform.position, enemyTargets[targetIndex].position, bounceSpeed * Time.deltaTime);//3.当可以弹跳且列表内数量大于0调用ToWords,这将使剑能够跳到敌人身上if (Vector2.Distance(transform.position, enemyTargets[targetIndex].position) .1f){enemyTargets[targetIndex].GetComponentEnemy().DamageImpact();targetIndex;bounceAmount--;//设置弹跳次数if (bounceAmount 0){isBouncing false;isReturning true;}//这样会使当弹跳次数为0时返回到角色手中if (targetIndex enemyTargets.Count){targetIndex 0;}}//利用与目标距离的判断使剑接近目标距离时切换到下一个目标。//且如果所有目标都跳完了切回第一个}}private void OnTriggerEnter2D(Collider2D collision)//传入碰到的物体的碰撞器{if (isReturning){return;}//修复在返回时扔出时没有碰到任何物体但返回时碰到了物体导致剑的一些性质发生改变的问题及回来的时候调用了OnTriggerEnter2Dif(collision.GetComponentEnemy()!null){Enemy enemy collision.GetComponentEnemy();SwordSkillDamage(enemy);}SetupTargetsForBounce(collision);StuckInto(collision);}//打开IsTrigger时才可使用该函数private void SwordSkillDamage(Enemy enemy){EnemyStats enemyStats enemy.GetComponentEnemyStats();player.stats.DoDamage(enemyStats);if(player.skill.sword.timeStopUnlocked)enemy.FreezeTimerFor(freezeTimeDuration);if (player.skill.sword.vulnerableUnlocked)enemyStats.MakeVulnerableFor(freezeTimeDuration);//调用脆弱效果函数ItemData_Equipment equipment Inventory.instance.GetEquipment(EquipmentType.Amulet);if (equipment ! null){equipment.Effect(enemy.transform);}}//造成伤害函数private void SetupTargetsForBounce(Collider2D collision){if (collision.GetComponentEnemy() ! null)//首先得碰到敌人只有碰到敌人才会跳{if (isBouncing enemyTargets.Count 0){Collider2D[] colliders Physics2D.OverlapCircleAll(transform.position, 10);foreach (var hit in colliders){if (hit.GetComponentEnemy() ! null){enemyTargets.Add(hit.transform);}}}}}//https://docs.unity3d.com/cn/current/ScriptReference/Collider2D.OnTriggerEnter2D.htmlprivate void StuckInto(Collider2D collision){if(pierceAmount 0 collision.GetComponentEnemy()! null)//本质就是能穿过敌人在amount0时不执行能让剑卡在敌人里的语句就行{pierceAmount--;return;}if (isSpinning){StopWhenSpinning();return;}//防止卡在敌人身上canRotate false;cd.enabled false;//相当于关闭碰撞后触发函数。//https://docs.unity3d.com/cn/current/ScriptReference/Collision2D-enabled.htmlrb.isKinematic true;//开启物理学反应 https://docs.unity3d.com/cn/current/ScriptReference/Rigidbody2D-isKinematic.htmlrb.constraints RigidbodyConstraints2D.FreezeAll;//冻结所有移动if (isBouncingenemyTargets.Count0)//修复剑卡不到墙上的bugreturn;//终止对动画的改变和终止附在敌人上transform.parent collision.transform;//设置sword的父组件为碰撞到的物体anim.SetBool(Rotation, false);}}Sword_Skill.cs using UnityEngine; using UnityEngine.UI;public enum SwordType {Regular,Bounce,Pierce,Spin }public class Sword_Skill : Skill {public SwordType swordType SwordType.Regular;//创建应一个enum列表,后面用来判断切换状态[Header(Skill Info)][SerializeField] private UI_SkillTreeSlot swordUnlockButton;public bool swordUnlocked;[SerializeField] private GameObject swordPrefab;//sword预制体[SerializeField] private Vector2 launchForce;//发射力度[SerializeField] private float swordGravity;//发射体的重力[SerializeField] private float freezeTimeDuration;[SerializeField] private float returnSpeed;[Header(Bounce Info)][SerializeField] private UI_SkillTreeSlot bounceUnlockButton;[SerializeField] private int bounceAmount;[SerializeField] private float bounceGravity;[SerializeField] private float bounceSpeed;[Header(Pierce info)][SerializeField] private UI_SkillTreeSlot pierceUnlockButton;[SerializeField] private int pierceAmount;[SerializeField] private float pierceGravity;[Header(Spin info)][SerializeField] private UI_SkillTreeSlot spinUnlockButton;[SerializeField] private float hitCooldown .35f;//攻击冷却[SerializeField] private float maxTravelDistance 7;//最大攻击距离[SerializeField] private float spinDuration 2;//持续时间[SerializeField] private float spinGravity 1;[Header(Passive skills)][SerializeField] private UI_SkillTreeSlot timeStopUnlockButton;public bool timeStopUnlocked { get; private set; }[SerializeField] private UI_SkillTreeSlot vulnerableUnlockButton;public bool vulnerableUnlocked{ get; private set; }[Header(Aim dots)][SerializeField] private int numberOfDots;//需要的点的数量[SerializeField] private float spaceBetweenDots;//相隔的距离[SerializeField] private GameObject dotPrefab;//dot预制体[SerializeField] private Transform dotsParent;//不是很懂private GameObject[] dots;//dot组private Vector2 finalDir;protected override void Start(){base.Start();GenerateDots();//生成点函数SetupGravity();swordUnlockButton.GetComponentButton().onClick.AddListener(UnlockSword);timeStopUnlockButton.GetComponentButton().onClick.AddListener(UnlockTimeStop);vulnerableUnlockButton.GetComponentButton().onClick.AddListener(UnlockVulnerable);bounceUnlockButton.GetComponentButton().onClick.AddListener(UnlockBounce);pierceUnlockButton.GetComponentButton().onClick.AddListener(UnlockPierce);spinUnlockButton.GetComponentButton().onClick.AddListener(UnlockSpin);}private void SetupGravity()//每个剑的状态都对应了不同的剑重力{if (swordType SwordType.Pierce){swordGravity pierceGravity;}if (swordType SwordType.Bounce){swordGravity bounceGravity;}if (swordType SwordType.Spin){swordGravity spinGravity;}}protected override void Update(){base.Update();if (Input.GetKeyUp(KeyCode.Mouse1)){finalDir new Vector2(AimDirection().normalized.x * launchForce.x, AimDirection().normalized.y * launchForce.y);//将位移量改为单位向量分别与力度的xy相乘作为finalDir}if (Input.GetKey(KeyCode.Mouse1)){for (int i 0; i dots.Length; i){dots[i].transform.position DotsPosition(i * spaceBetweenDots);//用循环为每个点以返回值赋值传入值为每个点的顺序i*点间距}}}public void CreateSword(){GameObject newSword Instantiate(swordPrefab, player.transform.position, transform.rotation);//创造实例初始位置为此时player的位置Sword_Skill_Controller newSwordScript newSword.GetComponentSword_Skill_Controller();//获得Controllerif (swordType SwordType.Bounce){newSwordScript.SetupBounce(true, bounceAmount, returnSpeed);}else if (swordType SwordType.Pierce){newSwordScript.SetupPierce(pierceAmount);}else if (swordType SwordType.Spin){newSwordScript.SetupSpin(true, maxTravelDistance, spinDuration, hitCooldown);}newSwordScript.SetupSword(finalDir, swordGravity, player, freezeTimeDuration, bounceSpeed);//调用Controller里的SetupSword函数给予其速度和重力和player实例player.AssignNewSword(newSword);//调用在player中保存通过此方法创造出的sword实例DotsActive(false);//关闭点的显示}#region Unlock Regionprivate void UnlockTimeStop(){if (timeStopUnlockButton.unlocked)timeStopUnlocked true;}private void UnlockVulnerable(){if (vulnerableUnlockButton.unlocked)vulnerableUnlocked true;}private void UnlockSword(){if (swordUnlockButton.unlocked){swordUnlocked true;swordType SwordType.Regular;}}private void UnlockBounce(){if (bounceUnlockButton.unlocked)swordType SwordType.Bounce;}private void UnlockPierce(){if (pierceUnlockButton.unlocked)swordType SwordType.Pierce;}private void UnlockSpin(){if (spinUnlockButton.unlocked)swordType SwordType.Spin;}#endregion#region Aim regionpublic Vector2 AimDirection(){Vector2 playerPosition player.transform.position;//拿到玩家此时的位置Vector2 mousePosition Camera.main.ScreenToWorldPoint(Input.mousePosition);//https://docs.unity3d.com/cn/current/ScriptReference/Camera.ScreenToWorldPoint.html//大概就是返回屏幕上括号里的参数的位置这里返回了鼠标的位置//拿到此时鼠标的位置Vector2 direction mousePosition - playerPosition;//获得距离的绝对向量return direction;//返回距离向量}public void DotsActive(bool _isActive){for (int i 0; i dots.Length; i){dots[i].SetActive(_isActive);//设置每个点是否显示函数}}private void GenerateDots()//生成点函数{dots new GameObject[numberOfDots];//为dot赋予实例数量for (int i 0; i numberOfDots; i){dots[i] Instantiate(dotPrefab, player.transform.position, Quaternion.identity, dotsParent);//对象与世界轴或父轴完全对齐//https://docs.unity3d.com/cn/current/ScriptReference/Quaternion-identity.htmldots[i].SetActive(false);//关闭dot}}private Vector2 DotsPosition(float t)//传入顺序相关的点间距{Vector2 position (Vector2)player.transform.position new Vector2(AimDirection().normalized.x * launchForce.x,AimDirection().normalized.y * launchForce.y) * t //基本间距 .5f * (Physics2D.gravity * swordGravity) * (t * t)//重力影响;//t是控制之间点间距的return position;//返回位置}//设置点间距函数#endregion}PlayerGroundState.cs using System.Collections; using System.Collections.Generic; using UnityEngine; //GroundState用于保证只有在Idle和Move这两个地面状态下才能调用某些函数并且稍微减少一点代码量 public class PlayerGroundState : PlayerState {public PlayerGroundState(Player _player, PlayerStateMachine _stateMachine, string _animBoolName) : base(_player, _stateMachine, _animBoolName){}public override void Enter(){base.Enter();}public override void Exit(){base.Exit();}public override void Update(){base.Update();if(Input.GetKeyDown(KeyCode.R)){stateMachine.ChangeState(player.blackhole);}if(Input.GetKeyDown(KeyCode.Mouse1)HasNoSword()player.skill.sword.swordUnlocked)//点击右键进入瞄准状态当sword存在时不能进入aim状态{stateMachine.ChangeState(player.aimSword);}if (Input.GetKeyDown(KeyCode.Q) player.skill.parry.parryUnlocked)//摁Q进入反击状态{stateMachine.ChangeState(player.counterAttack);}if(Input.GetKeyDown(KeyCode.Mouse0))//p38 2.从ground进入攻击状态{stateMachine.ChangeState(player.primaryAttack);}if(player.IsGroundDetected()false){stateMachine.ChangeState(player.airState);}// 写这个是为了防止在空中直接切换为moveState了。if (Input.GetKeyDown(KeyCode.Space) player.IsGroundDetected()){stateMachine.ChangeState(player.jumpState);}//空格切换为跳跃状态}private bool HasNoSword()//用这个函数同时控制了是否能进入aimSword和如果sword存在便使他回归player的功能{if(!player.sword){return true;}player.sword.GetComponentSword_Skill_Controller().ReturnSword();return false;} }
http://www.zqtcl.cn/news/951144/

相关文章:

  • 网站建设售后培训wordpress 过滤html
  • 湖北森泰建设集团有限公司网站国外产品设计网站推荐
  • 网站建设与代运营产品介绍排版网页设计教程
  • 音乐网站排名搜索引擎网络推广方法
  • asp.net 企业网站昆明高端seo怎么做
  • 图书馆网站建设需求方案企业网站背景图片
  • 网站app的作用做家教网站资质
  • 资源网站搭建北京app网站建设
  • 天津做宠物饲料的网站wordpress添加注册页面模板
  • 网站建设公司石家庄php网站开发报价
  • 国外免费网站服务器链接cpa自己做网站
  • 手机网站的优缺点2024中国企业500强
  • 黄河道网站建设网站设计标语
  • 企业网站建设范文wordpress 5.1
  • 网站 河北 备案 慢设计一个营销方案
  • 网站建设培训合肥品牌设计案例
  • 建网站注册免费云服务器
  • 可以做网站的公司有哪些聊天软件开发厂家有哪些
  • 正规网站建设公司一般要多少钱婚纱网站有哪些
  • 企业网站开发目的和意义住房和城乡建设厅官网查询
  • 直播一级a做爰片免费网站wordpress 模板 使用
  • 网站开发中期检查优质的菏泽网站建设
  • 建设网站号码在线html编辑
  • 品牌型网站制作有哪些公司石家庄广告制作公司
  • 做网站赚几百万网站效果图怎么做的
  • 哪些网站做企业招聘不要花钱wordpress底部导航代码
  • 怎么用链接进自己做的网站企业组织架构
  • 建设新网站征求意见网站设计佛山
  • 重庆建设造价工程信息网站东莞电商页面设计公司
  • 乔拓云智能建站官网登录入口怎么样做网站卖农产品