C# 使用PointerEventData返回错误:“0”;意外符号“;

C# 使用PointerEventData返回错误:“0”;意外符号“;,c#,unity3d,unity3d-2dtools,cursor-position,C#,Unity3d,Unity3d 2dtools,Cursor Position,我是C#新手,决定现在就开始使用它,因为大多数Unity教程都关注它,除了网页之外,我从未使用过JavaScript 在我尝试使用Vector2.MoveToward方法之前,大多数情况下一切正常: void OnMouseDown() { int weapCoolDown = 1; Instantiate(bullet_player); Vector2.MoveTowards(GameObject.Find("player-1"), Vector2 Pointe

我是C#新手,决定现在就开始使用它,因为大多数Unity教程都关注它,除了网页之外,我从未使用过JavaScript

在我尝试使用Vector2.MoveToward方法之前,大多数情况下一切正常:

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

我尝试删除Vector2,然后它要求我添加事件系统,但它已经在UnityEngine中了。我修复了它,然后它说它不存在?然后我修正了它,它只给了我一堆我甚至不知道如何消除的错误

当我尝试使用标识符时,它会分配它,但它不允许我使用它,它会像往常一样显示意外的符号


Unity手册没有提供足够的细节或示例来真正帮助我解决这个问题,我是否缺少一个类或引用,或者我是否应该尝试使用另一种方法?

您的代码中有几点需要检查:

未使用正确的参数调用
GameObject.Find()
将返回一个GameObject,而不是矢量2。如果您正在查找玩家1的当前位置,则应根据玩家1的transform.position构建向量2

Vector2 playerPosition=newvector2();
playerPosition.x=GameObject.Find(“player-1”).transform.position.x;
playerPosition.y=GameObject.Find(“player-1”).transform.position.y;
任何对的使用都需要对的using指令。为了包含它,请使用UnityEngine.EventSystem将
添加到剩余的using指令中

PointerEventData.position()前面的Vector2前缀无效。它不是显式类型转换,因为它不在括号中,但不需要类型转换,因为position将返回向量2

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

要使pointerEventData存在,它需要源自检索eventData的事件。不幸的是,
OnMouseDown()
不能做到这一点。但是,调用的接口方法具有所需的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);
    }
}

“除了网页,我从来没有使用过JavaScript。”。。。。我不知道这和你的问题有什么关系。你的代码是C#。这不是Unityscript。这不是Javascript。@程序员好吧,但我想既然我已经非常了解JS,我可能会开始转向它。C#没有完全相同的语法,所以我必须开始学习一门新的语言,或者重新开始学习js。当我与Unity合作时,我一直在努力坚持使用c,因为我发现大多数视频教程都主要关注它,我并不是说你不应该使用c。我告诉你,你问题中的代码是C代码而不是Javascript。过去,您可以使用Unityscript/Javascript,但现在是这样。你别无选择,只能学习C语言,代码是完美的,没有错误。感谢您的帮助,我认为下次我应该开始使用JavaScript,因为我已经知道这种语言,而且我对C#还是个新手。请注意,Unity使用了一种自定义JavaScript变体,也称为UnityScript,它在历史上和今天通常(但不一致)称之为“JavaScript”UnityScript只能用于编写Unity脚本。它与外部JavaScript库不可互操作,因此无法导入节点或三个。有关更多信息,请参阅。