使用PointerEventData返回错误:"意外的符号"

时间:2018-03-23 22:55:10

标签: c# unity3d unityscript unity3d-2dtools cursor-position

我是C#的新手,并决定现在开始使用它,因为大多数Unity教程都专注于它,而且我从未将JavaScript用于除网页以外的任何其他内容。

在大多数情况下,一切正常,直到我尝试使用 Vector2.MoveTowards 方法:

    void OnMouseDown() {
    int weapCoolDown = 1;
    Instantiate(bullet_player);
    Vector2.MoveTowards(GameObject.Find("player-1"), Vector2 PointerEventData.position(), float p1BulletSpeed);
}

Errors reported by Unity console

我尝试删除Vector2,然后它要求我添加 EventSystems ,但它已经在 UnityEngine 中。我解决了,然后它说它不存在?然后我修复了它,它只是给了我一些其他错误,我甚至不知道如何删除。

当我尝试使用标识符时,它会分配它,但它不会让我使用它,它会像往常一样说出意外的符号。

Unity手册没有提供足够的细节或示例来帮助我解决这个问题,是否有我缺少的课程或参考,或者我应该尝试使用其他方法?

1 个答案:

答案 0 :(得分:0)

您应该在代码中查看一些内容:

没有使用适当的参数调用Vector2.MoveTowards()GameObject.Find()将返回一个gameObject,而不是一个Vector2。如果你正在寻找玩家1的当前位置,你应该从玩家1的transform.position构建一个Vector2。

Vector2 playerPosition = new Vector2();
playerPosition.x = GameObject.Find("player-1").transform.position.x;
playerPosition.y = GameObject.Find("player-1").transform.position.y;

PointerEventData的任何使用都需要EventSystem的using指令。要包含它,请将using UnityEngine.EventSystem与其余的using指令一起添加。

PointerEventData.position()之前的Vector2前缀无效。它不是一个明确的类型转换,因为它不在括号中,但由于位置将返回Vector2,因此不需要类型转换。

pointerEventData.position是从对象引用中提取的属性。但是,PointerEventData.position()的实现不正确地将其用作静态方法。由于它实际上不是静态方法,而是动态属性,因此无法编译和绘制错误。

要使pointerEventData存在,它需要来自检索eventData的事件。不幸的是,OnMouseDown()没有这样做。但是,名为IPointerClickHandlerOnPointerClick(PointerEventData pointerEventData)接口方法具有您需要的pointerEventData。

重构现有代码,这更接近您正在寻找的功能。

// Add this "using" directive
using UnityEngine.EventSystems;

// Be sure to implement the interface of IPointerClickHandler
public class NameOfYourScript : MonoBehaviour, IPointerClickHandler {

    //
    // Additional Code in your class. . . .
    // 

    // Replace OnMouseDown() with this.
    public void OnPointerClick(PointerEventData pointerEventData) {
        Instantiate(bullet_player);

        Vector2 playerPosition = new Vector2();
        playerPosition.x = GameObject.Find("player-1").transform.position.x;
        playerPosition.y = GameObject.Find("player-1").transform.position.y;

        Vector2.MoveTowards(playerPosition, pointerEventData.position, p1BulletSpeed);
    }
}