我在 Unity 中的战斗脚本有点不起作用

Posted

技术标签:

【中文标题】我在 Unity 中的战斗脚本有点不起作用【英文标题】:My Combat Script in Unity is Kinda not Working 【发布时间】:2021-11-28 10:30:15 【问题描述】:

我在 Unity 中编写了一个战斗脚本,它可以工作......有点,因为如果我将 startTimeBtwAttack 浮点数设置为更高的 0,它就会停止工作,是的,我知道我的脚本非常长,但如果你有耐心的话和善良,然后请帮助我,这是代码。

using System.Collections;

使用 System.Collections.Generic; 使用 UnityEngine;

公共类 PlayerCombat : MonoBehaviour 私人玩家移动速度;

public bool hasSword = true;

private float timeBtwAttack;
public float startTimeBtwAttack;
public Animator animator;
public Transform attackPos;
public float attackRange;
public LayerMask whatIsEnemies;
public int damage;

public Audiosource swordSrc;
public AudioClip swordClip;

public float startDazedTime;
private float dazedTime;

private float attackTime = .25f;
private float attackCounter = .25f;

private bool isAttacking;


void Start()

    speed = FindObjectOfType<PlayerMovement>();


void Update()

    if (hasSword == true)
    
        if (dazedTime <= 0)
        
            speed.MovementSpeed = 5f;
        else 
        
            speed.MovementSpeed = 0f;
            dazedTime -= Time.deltaTime;
        


        if (timeBtwAttack <= 0)
        
            timeBtwAttack = startTimeBtwAttack;

            if(isAttacking)
            
                attackCounter -= Time.deltaTime;

                if (attackCounter <= 0)
                
                    animator.SetBool("isAttacking", false);
                    isAttacking = false;
                
            

            if (Input.GetKeyDown(KeyCode.X))
            
                dazedTime = startDazedTime;
                attackCounter = attackTime;
                animator.SetBool("isAttacking", true);

                swordSrc.PlayOneShot(swordClip);
                
                isAttacking = true;

                Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);
                for (int i = 0; i < enemiesToDamage.Length; i++)
            
                enemiesToDamage[i].GetComponent<EnemyScript>().TakeDamage(damage);
            
        
    else
    
        timeBtwAttack -= Time.deltaTime;
    
    


void OnDrawGizmosSelected()

    Gizmos.color = Color.red;
    Gizmos.DrawWireSphere(attackPos.position, attackRange);

【问题讨论】:

这些信息不足以提供任何帮助。请提供您的代码副本以及有关该问题的更多详细信息。 【参考方案1】:

timeBtwAttack = startTimeBtwAttack; 应该在if (Input.GetKeyDown(KeyCode.X)) 内。

按照目前的方式,您只需每“startTimeBtwAttack”秒检查 1 帧中的 X 输入。冷却时间应该只在你开始攻击时应用。

【讨论】:

非常感谢!

以上是关于我在 Unity 中的战斗脚本有点不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Unity VSCode Intellisense 在 2020 版本中不起作用

Unity OnTriggerEnter2D 有时不起作用

使用 Find in Awake 缓存脚本引用,在 Start 中不起作用

Unity 2D - OnMouseDown()不起作用

为啥我的脚本(旨在在游戏开始时消除重力)不起作用?

Unity Intellisense 不起作用(解决方案 1,杂项文件问题)