【发布时间】:2020-09-03 03:02:57
【问题描述】:
我是统一和编程的新手。我试图让我在第一场比赛中团结一致。你能帮助我吗?我尝试了这个人 https://www.youtube.com/watch?v=TWQlNztOoSM 的教程,但我在他的脚本中遇到了很多错误。
【问题讨论】:
-
所以修复第一集错误。重复直到所有错误都消失
标签: c# visual-studio unity3d scripting
我是统一和编程的新手。我试图让我在第一场比赛中团结一致。你能帮助我吗?我尝试了这个人 https://www.youtube.com/watch?v=TWQlNztOoSM 的教程,但我在他的脚本中遇到了很多错误。
【问题讨论】:
标签: c# visual-studio unity3d scripting
我的一个项目中有一个类似的设置。
玩家:
设置玩家的攻击动画,在开始时调用 Attack,在结束时调用 StopAttack 见https://docs.unity3d.com/Manual/script-AnimationWindowEvent.html
假设 rightHand 是武器的父变换,你可以激活你的武器。将这些方法添加到播放器的脚本中:
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();
}
}
武器:添加一个对撞机并勾选“Is Trigger”
我的敌人都有一个名为“badguy”的类,可以使用 badguy.Damage(float amount) 受到伤害。 “掩码”用于优化,应设置为敌人的图层。如果您不确定,请将 mask 设置为所有内容。
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;
}
}
}
}
}
【讨论】: