1

我目前正在 Unity 中尝试制作/测试 2D 游戏。当我尝试CharacterMotor.playerx从内部访问时,我不断收到以下错误camerafollow.js

访问非静态成员“playerx”需要“CharacterMotor”类型的实例

这是我的两个脚本:


camerafollow.js

  #pragma strict

 function Start () {
 transform.position.x =  CharacterMotor.playerx;
 }

CharacterMotor.js

    #pragma strict
    #pragma implicit
    #pragma downcast

    public var playerx : float = transform.position.x;
4

3 回答 3

2

您可以将 playerx 更改为静态,但我认为这不是您想要做的(可能只有一个玩家对象,但这会阻止您拥有多个 CharacterMotor)。我认为您想要/需要检索附加到此游戏对象的 CharacterMotor 实例。

#pragma strict

function Start () {
    var charMotor : CharacterMotor = gameObject.GetComponent(CharacterMotor);

    transform.position.x =  charMotor.playerx;
}
于 2013-10-18T18:58:16.487 回答
0

访问非静态成员“playerx”需要“CharacterMotor”类型的实例

上面的错误消息准确地描述了正在发生的事情。您只是在尝试访问变量而不首先创建它的实例。请记住UnityScript != JavaScript

要解决此问题,只需更改

public var playerx : float = transform.position.x;

public static var playerx : float = transform.position.x;

虽然这解决了你的直接问题,但我不建议继续沿着这条路走下去。我建议您先学习该语言的其他方面(例如课程),以便您可以更好地组织和构建数据。

见: http: //forum.unity3d.com/threads/34015-Newbie-guide-to-Unity-Javascript-(long)

于 2013-10-18T18:26:36.310 回答
0

CharacterMotor 是类型,内存中可以同时有多个类型的实例化,因此当您调用类型名称时,您不会引用内存中的任何实例。

要获取连接到您当前游戏对象的类型的实例,请尝试以下操作:

var charactorMotor : CharacterMotor = gameObject.getComponent("CharacterMotor");

现在您可以访问该实例属性

transform.position.x =  characterMotor.playerx;
于 2013-10-21T18:15:28.957 回答