Unity3d Unity2D攻击动画和伤害计时
背景: 我有一个2D游戏,在这个游戏中,你可以生成向右移动的单位,攻击敌人,直到你摧毁敌人的基地。每个单元都被实例化并具有raycast2D组件。当它没有发现任何东西时,它会行走,当它发现敌人时,它会停止并用攻击冷却时间进行攻击 现在,它一旦发现敌人,就会播放攻击动画,同时造成伤害。例如:如果攻击动画需要0.5秒,冷却时间为1秒,则计时器同时运行,动画与伤害刻度不匹配 光线投射代码停止移动,关闭行走动画并检查其是否可以攻击Unity3d Unity2D攻击动画和伤害计时,unity3d,Unity3d,背景: 我有一个2D游戏,在这个游戏中,你可以生成向右移动的单位,攻击敌人,直到你摧毁敌人的基地。每个单元都被实例化并具有raycast2D组件。当它没有发现任何东西时,它会行走,当它发现敌人时,它会停止并用攻击冷却时间进行攻击 现在,它一旦发现敌人,就会播放攻击动画,同时造成伤害。例如:如果攻击动画需要0.5秒,冷却时间为1秒,则计时器同时运行,动画与伤害刻度不匹配 光线投射代码停止移动,关闭行走动画并检查其是否可以攻击 else if (hitInfo.collider.gameObject
else if (hitInfo.collider.gameObject.tag == "Enemy")
{
transform.Translate(Vector2.right * 0 * Time.deltaTime);
anim.SetBool("isWalking", false);
if (attackCurrentTime < attackCD)
{
attackCurrentTime += Time.deltaTime;
}
else
{
attackCurrentTime = 0;
basicAttackEnemy();
}
}
else if(hitInfo.collider.gameObject.tag==“敌人”)
{
transform.Translate(Vector2.right*0*Time.deltaTime);
动画设置工具(“isWalking”,false);
如果(attackCurrentTime
这是最基本的敌人();功能。它只是启动动画并造成伤害
void basicAttackEnemy()
{
anim.SetTrigger("attackEnemy");
hitInfo.collider.gameObject.GetComponent<EnemyIA>().TakeDamage(attackDamage);
}
void basictacktoken()
{
动画设置触发器(“攻击敌人”);
hitInfo.collider.gameObject.GetComponent().TakeDamage(攻击伤害);
}
我如何在Unity中更改代码或做其他事情,让我的伤害、动画和冷却计时器正确同步
谢谢你的时间。假设你有某种生物在做动画,他们有某种武器(即使武器只是拳头或爪子),我发现实施攻击和伤害的“最佳”方法是使用迎面相撞方法来判断你何时与敌人接触 你要做的是: 第1步:在武器上,或者在他们身体的某个部位,创建一个额外的对撞机,该对撞机应该足够靠近应该承受伤害的敌人。请随意将这个对撞机设置得相当大,因为它不会在游戏中真正“显示”任何东西 步骤2:在代码[SerializeField]私有BoxCollider weaponCollider中创建一个新变量。(如果您需要不同的形状,可以从BoxCollider更改此项,没有问题) 步骤3:将这些更改保存到代码中,现在在编辑器中,您将看到在具有该攻击动画脚本的游戏对象(玩家对象?)上有一个空的参数槽,将新的碰撞器从检查器拖放到该槽中,这将告诉您的代码您正在谈论的碰撞器 第四步:你需要使用图层来识别敌人,但不要太担心。本教程将为您提供所需的大部分内容-> 步骤5:最后,您可以将代码更新为如下内容。(这可能不准确,但它应该能让你离得足够近,让你自己走完剩下的路
void basicAttackEnemy()
{
anim.SetTrigger("attackEnemy");
weaponCollider.enabled = true;
}
步骤7:使用以下内容创建一个新脚本,并将其附加到碰撞器上
void onCollisionEnter(Collision collision) {
if (gameObject.Layer == "Enemy") {
hitInfo.collider.gameObject.GetComponent<EnemyIA>().TakeDamage(attackDamage);
self.enabled = false;
}
}
void onCollisionEnter(碰撞){
如果(gameObject.Layer==“敌人”){
hitInfo.collider.gameObject.GetComponent().TakeDamage(攻击伤害);
self.enabled=false;
}
}
您可能需要更改OnCollisionCenter脚本,有关碰撞器和碰撞的更多信息,请尝试本教程
但总的来说,这一切都是这样的。它创建了一个系统,你的攻击动画激活一个对撞机,检查它是否真的击中了敌人,如果击中了,那么它会对敌人造成伤害,然后再次关闭自己。它关闭了自己,这样你就不会一次击中就杀死一切,否则,它会造成伤害在攻击动画中,一秒钟内出现多次。我想问题在于动画的计时。你能与我们分享你的动画状态和转换吗?