我在两个脚本中有相同的函数- Attack(),我想从一个有这个函数的类继承它们。所以我的问题是,在c# Unity中,脚本可以被设置为函数的参数吗?
public void Attack()
{
_animator.SetTrigger("Attack");
Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(_attackPoint.position, _attackRange, _enemyLayer);
foreach (Collider2D enemy in hitEnemies)
{
enemy.GetComponent<PlayerAnimator>().TakeDamage(_attackDamage);// in second script there is <EnemyAnimator>
}
}
4条答案
按热度按时间46scxncf1#
这是面向对象编程的基础-在这种情况下,您主要有两种选择:
你应该有
然后
以及
这里,如果您不需要
EnemyAnimator
和PlayerAnimator
之间的任何不同行为,那么答案很简单:那就只上一门课吧!然后我会去
5kgi1eie2#
是的,在unity c#中,脚本可以被设置为函数的参数。你所需要做的就是首先输入脚本的名称,然后输入你想要调用的名称。就像这样:
fjaof16o3#
从长远来看,这可能不是你想要的(检查关于OOP结构的答案),但这是你将脚本作为参数传递的方式。
EnemyAnimator和PlayerAnimator类可能都派生自Monobhavior类。
如果您希望将攻击功能用于两个Animator,则需要添加常规Monobehavior类型作为参数:
这样,您可以在调用函数时将EnemyAnimator和PlayerAnimator用作参数。
tsm1rwdh4#
回答:
在c#Unity中脚本可以被设置为函数的参数吗?
答案是肯定的,但是有一些限制。如果你想使用
GetComponent<ScriptParameter>()
,你需要做一些类似generic method的事情:要将
Type
作为参数传递,可以使方法接受泛型类型并将其约束到基类。Attack()
方法转换为一个接受攻击者和目标信息的泛型静态方法 *该类型假定
PlayerAnimator
和EnemyAnimator
派生自基类,例如:x一个一个一个一个x一个一个二个一个x一个一个三个一个
现在,您只需将函数调用为:
或