Unity

时间:2017-01-13 12:00:29

标签: c# unity3d

我正试图制造一个在3点之间移动的攻击剑。人物手中的主要位置,摆动的顶部和摆动的底部。之后它会回到原地。

我使用了一般的“地面检查跳转”代码并对其进行了一些修改,因为在循环中使用“Move towards”从来没有完全符合改为下一阶段的要求。

两个错误都在“reachTarget”行上;

The best overloaded method match for `UnityEngine.Physics2D.OverlapCircle(UnityEngine.Vector2, float, int)' has some invalid arguments

Argument `#3' cannot convert `UnityEngine.Vector3' expression to type `int'

这是代码。

void TargetCheck(GameObject target)
{
    //Returns true when the sword is over the target
    reachedTarget = Physics2D.OverlapCircle(transform.position, 0.1f, target.transform.position);
}

我不太确定我在这里做错了什么。感谢您的帮助:))

2 个答案:

答案 0 :(得分:1)

“无法将x表达式转换为y型”总是意味着您正在尝试输入x类型的某些类型y。例如:int number =“hello world”;不管用。您正在尝试将int转换为字符串

在您的情况下,您尝试使用int LayerMask输入target.transform.positionSee documentation on OverlapCircle

如果您不确定哪个LayerMasks以及如何进行bitshift,请声明public LayerMask layermask;并让Unity序列化它。这将为您提供复选框按钮以填充哪些图层。

编辑:看来Vector3.Distance是OP想要的!

答案 1 :(得分:0)

您可能不需要第三个参数。这应该是您要与之碰撞的对象的图层。确保它是目标的图层ID。

之后,可能应该将targetTarget与目标的Collider2D组件进行比较。如果匹配 - 你就受到了打击。

为懒人编辑 - 应该是这样的:

In [22]: dic = {'info': [{'a':0, 'b':'1'},{'a':0, 'b':'3'},{'a':0, 'b':'3'},{'a':0, 'b':'1'}]}

In [23]: lst = ['1']

In [25]: [sub_dict for sub_dict in dic['info'] if sub_dict['b'] == lst[0]]
Out[25]: [{'a': 0, 'b': '1'}, {'a': 0, 'b': '1'}]

PS:您应该事先获得目标的Collider2D组件并将其存储在某个地方..