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