试图从统一的另一个脚本中访问变量(Not Homework)

时间:2013-10-18 13:22:09

标签: unity3d unityscript

我目前正在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;

3 个答案:

答案 0 :(得分:2)

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

#pragma strict

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

    transform.position.x =  charMotor.playerx;
}

答案 1 :(得分:0)

  

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

以上错误消息准确描述了正在发生的事情。您只是尝试访问变量而不首先创建它的实例。请注意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)

答案 2 :(得分:0)

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

获取与您当前游戏对象相关联的类型的实例,试试这个:

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

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

transform.position.x =  characterMotor.playerx;