在Unity上运行Javascript代码给出错误。

时间:2016-06-02 08:35:42

标签: javascript unity3d game-engine

大家好,我们试图构建一个简单的游戏,

这是我的代码 当我运行此代码时,它给我错误'playerMovement'不是'UnityEngine.Rigidbody'的成员。

public var speed : int = 15;
var player : Rigidbody;
var player2 : Rigidbody;

function Start () {
player = GetComponent.<Rigidbody>();
player2 = GetComponent.<Rigidbody>();
}

function playerMovement(){
if(Input.GetKey(KeyCode.UpArrow)){
    player.AddForce(Vector3.forward*speed);
    Debug.Log("Player 1 is moving forward");
}
if(Input.GetKey(KeyCode.DownArrow)){
    player.AddForce(Vector3.back*speed);
}
if(Input.GetKey(KeyCode.LeftArrow)){
    player.AddForce(Vector3.left*speed);
}
if(Input.GetKey(KeyCode.RightArrow)){
    player.AddForce(Vector3.right*speed);
}

}

function player2Movement(){
if(Input.GetKey(KeyCode.UpArrow)){
    player2.AddForce(Vector3.forward*speed);
    Debug.Log("Player 2 is moving forward");
}
if(Input.GetKey(KeyCode.DownArrow)){
    player2.AddForce(Vector3.back*speed);
}
if(Input.GetKey(KeyCode.LeftArrow)){
    player2.AddForce(Vector3.left*speed);
}
if(Input.GetKey(KeyCode.RightArrow)){
    player2.AddForce(Vector3.right*speed);
}

} 

function Update () {
player.playerMovement();
player2.playerMovement();
}

它给我错误'playerMovement'不是'UnityEngine.Rigidbody'的成员。 如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

rigidbody函数不属于gameObject,它是附加到playerMovement()的脚本的一部分 所以每个想要调用它的游戏对象都必须附加这个脚本,你可以通过调用脚本中的public var speed : int = 15; var player : Rigidbody; function Start () { player = GetComponent.<Rigidbody>(); } function playerMovement(){ if(Input.GetKey(KeyCode.UpArrow)){ player.AddForce(Vector3.forward*speed); Debug.Log("Player 1 is moving forward"); } if(Input.GetKey(KeyCode.DownArrow)){ player.AddForce(Vector3.back*speed); } if(Input.GetKey(KeyCode.LeftArrow)){ player.AddForce(Vector3.left*speed); } if(Input.GetKey(KeyCode.RightArrow)){ player.AddForce(Vector3.right*speed); } } function Update () { playerMovement(); } 来调用它们的移动函数

public var speed : int = 15;
var player1Obj: GameObject;
var player2Obj: GameObject;
var player : Rigidbody;
var player2 : Rigidbody;

function Start () {
player = player1Obj.GetComponent.<Rigidbody>();
player2 = player2Obj.GetComponent.<Rigidbody>();
}

function playerMovement(){
if(Input.GetKey(KeyCode.UpArrow)){
    player.AddForce(Vector3.forward*speed);
    Debug.Log("Player 1 is moving forward");
}
if(Input.GetKey(KeyCode.DownArrow)){
    player.AddForce(Vector3.back*speed);
}
if(Input.GetKey(KeyCode.LeftArrow)){
    player.AddForce(Vector3.left*speed);
}
if(Input.GetKey(KeyCode.RightArrow)){
    player.AddForce(Vector3.right*speed);
}

}

function player2Movement(){
if(Input.GetKey(KeyCode.W)){
    player2.AddForce(Vector3.forward*speed);
    Debug.Log("Player 2 is moving forward");
}
if(Input.GetKey(KeyCode.S)){
    player2.AddForce(Vector3.back*speed);
}
if(Input.GetKey(KeyCode.A)){
    player2.AddForce(Vector3.left*speed);
}
if(Input.GetKey(KeyCode.D)){
    player2.AddForce(Vector3.right*speed);
}

} 

function Update () {
playerMovement();
player2Movement();
}

你写的内容还有另外一个问题,那就是你在同一时间用同一把钥匙移动你的两个玩家,所以你必须为每个玩家输入制作单独的按键或让它转向,这取决于你的游戏

{{1}}

答案 1 :(得分:0)

将代码从C#移植到Javascript时需要注意。

player.playerMovement();
player2.playerMovement();

您正在调用的函数都在同一个脚本中。

直接打电话给他们。

playerMovement();
player2Movement();

另请注意播放器 2 运动上方代码中的拼写错误。

即使你修复了它,它也会编译没有错误,但由于以下原因而无法按预期工作:

player = GetComponent.<Rigidbody>();
player2 = GetComponent.<Rigidbody>();

因为你有不同的GameObject /球要移动。在获得每个GameObject.Find引用之前,您必须先使用Rigidbody查找它们。

player = GameObject.Find("Ball1").GetComponent.<Rigidbody>();
player2 =  GameObject.Find("Ball2").GetComponent.<Rigidbody>();

最后,控件搞砸了。您正在使用相同的控件。我认为这是一个糟糕的复制和粘贴或其他东西,但下面是你的整个工作代码。

注意

在您说它不起作用之前,请确保您的两个GameObject /球被命名为 Ball1 Ball2 ,并确保旧的C#冷不附着在他们身上。代码经过测试,确实有效!

#pragma strict

public var speed : int = 15;
var player : Rigidbody;
var player2 : Rigidbody;

function Start () {
    player = GameObject.Find("Ball1").GetComponent.<Rigidbody>();
    player2 =  GameObject.Find("Ball2").GetComponent.<Rigidbody>();
}

function playerMovement(){
    if (Input.GetKey(KeyCode.A))
    {
        player.AddForce(Vector3.left * speed);
    }

    if (Input.GetKey(KeyCode.D))
    {
        player.AddForce(Vector3.right * speed);
    }

    if (Input.GetKey(KeyCode.W))
    {
        player.AddForce(Vector3.forward * speed);
        Debug.Log("Player 1 is moving forward");
    }
    if (Input.GetKey(KeyCode.S))
    {
        player.AddForce(Vector3.back * speed);
    }
}

function player2Movement(){
    if(Input.GetKey(KeyCode.UpArrow)){
        player2.AddForce(Vector3.forward*speed);
        Debug.Log("Player 2 is moving forward");
    }
    if(Input.GetKey(KeyCode.DownArrow)){
        player2.AddForce(Vector3.back*speed);
    }
    if(Input.GetKey(KeyCode.LeftArrow)){
        player2.AddForce(Vector3.left*speed);
    }
    if(Input.GetKey(KeyCode.RightArrow)){
        player2.AddForce(Vector3.right*speed);
    }

} 

function Update () {
    playerMovement();
    player2Movement();
}