C# 统一的近战系统

C# 统一的近战系统,c#,visual-studio,unity3d,scripting,C#,Visual Studio,Unity3d,Scripting,我是unity和programming的新手。我想让我在团结的第一场比赛中战斗。你能帮助我吗?我尝试了这个家伙的教程,但他的脚本中有很多错误。我的一个项目中也有类似的设置 玩家: 设置玩家的攻击动画,在开始时调用攻击,在结束时调用停止攻击 看 假设右手是武器的父变换,你可以激活你的武器。将以下方法添加到玩家的脚本中: public void Attack() { foreach (Weapon w in rightHand.GetComponentsInChild

我是unity和programming的新手。我想让我在团结的第一场比赛中战斗。你能帮助我吗?我尝试了这个家伙的教程,但他的脚本中有很多错误。

我的一个项目中也有类似的设置

玩家:

设置玩家的攻击动画,在开始时调用攻击,在结束时调用停止攻击 看

假设右手是武器的父变换,你可以激活你的武器。将以下方法添加到玩家的脚本中:

    public void Attack()
    {
        foreach (Weapon w in rightHand.GetComponentsInChildren<Weapon>())
        {
            w.Attack();
        }
    }
    //called by animations
    public void StopAttack()
    {
        foreach (Weapon w in rightHand.GetComponentsInChildren<Weapon>())
        {
            w.StopAttack();
        }
    }
公共无效攻击()
{
foreach(右手中的武器w.GetComponentsInChildren())
{
w、 攻击();
}
}
//由动画调用
公开无效停止攻击()
{
foreach(右手中的武器w.GetComponentsInChildren())
{
w、 停止攻击();
}
}
武器:添加一个对撞机并检查“是否触发”

我的敌人都有一个叫做“坏蛋”的职业,可以和坏蛋一起受到伤害。伤害(浮动量)。“蒙版”用于优化,应设置为敌人所在层。如果不确定,请将“掩码”设置为“所有”

public class Weapon : MonoBehaviour
...
{
    public LayerMask mask
    public float dmg;
    private bool canDmg;
    public float attackDuriation;
    private float timeSinceAttack;

    void Update()
    {
        timeSinceAttack += Time.deltaTime;
        if(timeSinceAttack > attackDuriation)
        {
            canDmg = false;
        }
    }

    public void Attack()
    {
        canDmg = true;
        timeSinceAttack = 0;
    }

    public void StopAttack()
    {
        canDmg = false;
    }

    void OnTriggerEnter(Collider other)
    {
        if (canDmg)
        {
            if(mask == (mask | (1 << other.gameObject.layer)))//if included in the mask
            {
                badguy bg = other.GetComponentInParent<badguy>();
                if(bg != null)
                {
                    bg.Damage(dmg);
                    canDmg = false;
                }
            }
        }

    }
}
公共级武器:单行为
...
{
公共层掩码
公共浮动dmg;
私人布尔坎德明;
公众浮标攻击;
私人攻击;
无效更新()
{
timeSinceAttack+=Time.deltaTime;
如果(攻击时间>攻击持续时间)
{
canDmg=假;
}
}
公开无效攻击()
{
canDmg=真;
时间间隔=0;
}
公开无效停止攻击()
{
canDmg=假;
}
无效对撞机(对撞机其他)
{
if(坎德毫克)
{

如果(mask==(mask |)(1),则修复第一集错误。重复此操作,直到所有错误都消失,以便将来参考,请参阅