如果其他陈述中的Unity Vector

时间:2018-05-15 04:45:21

标签: c# unity3d unityscript

我是编码的初学者,请耐心等待。我试图为2d平台游戏创建一个回旋镖机制,当回旋镖到达我可以在检查员中设置它的某一点时切换方向。我想到的方式是,如果我减去飞去来器的坐标和目的地点,我将获得它们之间的距离并将其放入if语句中并比较以查看飞去来器位置是否大于等于该点所以它可以改变它的方向。但是我收到了

这个错误
  

运算符不能应用于浮点数和向量2的操作数。

下面是我的回旋镖代码:

public Transform Target;

public float speed; // speed it travels

public Vector2 returnDistance; // The point in where boomerang switches 
direction

private bool keepGoing = false; // Update the frame to make it keep going


// Use this for initialization
void Start () {

    //rb2d = GetComponent<Rigidbody2D>();

}

// Update is called once per frame
void Update () {

    float checkDistance = Vector2.Distance(transform.position, 
    returnDistance); // check the distance between two points 

    Debug.DrawLine(Target.position, transform.position, Color.red);

    if (Input.GetMouseButton(0) || (keepGoing == true))
    {

        transform.Translate(Vector2.right * speed * Time.deltaTime); // move 
        the boomerang to the right
        keepGoing = true;

    }

    if (checkDistance >= returnDistance)
    {
        transform.Translate(-Vector2.right * speed * Time.deltaTime); // move 
        the boomerang to the left
        keepGoing = true;
    } 
  }
}         

那么我应该如何解决这个问题,以便我不能在检查员中设置它为飞旋镖转折点设置的值并将其放入if语句中?

3 个答案:

答案 0 :(得分:2)

你应该将checkDistance变量与某个treshhold浮点值(接近零,但不是0f) - 0.1f或0.01f等进行比较(你应该通过测试来计算)。

UPD:我想我应该扩展我的答案,以澄清这里的问题。您正在尝试比较float[float; float]。显然它没有意义。所以你应该比较两个浮点值。

如果你想要回旋镖与投掷者飞行一段固定的距离,那么你可以将你的角色与回旋镖的距离设置为一些漂浮值(最大投掷距离)。

或者如果你想要飞镖在到达空间中的某个点后返回,你应该按照我在开头写的那样做 - 比较飞旋镖到太空中那个点的距离和一些漂浮值(足够近以至于认为飞旋镖击中了目标)

答案 1 :(得分:1)

你说“我正在尝试为一个2d平台游戏创建一个飞旋镖机制,其中飞旋镖在到达某个点时切换方向”。然后你可以使用Vector2.sqrMagnitude

以下是使用此向量的示例

public static float SqrMagnitude(Vector2 a)
{
     return a.x * a.x + a.y * a.y;
}

所以在你的情况下它可能是这样的

 Vector2 dir = P2 - P1;
 float length = dir.magnitude;
 dir -= length;

希望得到这个帮助。

答案 2 :(得分:-3)

If ((Checkdistance -  returndistance) > 0f)