簡體   English   中英

在Unity上運行Javascript代碼給出錯誤。

[英]Running Javascript code on Unity giving error.

大家好,試圖建立一個簡單的游戲,

這是我的代碼,當我運行此代碼時,它給我錯誤'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'的成員。 如何解決這個問題。

playermovement函數不是rigidbody的一部分,它是附加到gameObject的腳本的一部分,因此每個想要調用它的游戲對象必須將這個腳本附加到它們上,你可以通過調用其中的playerMovement()來調用它們的move函數。腳本

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();
}

將代碼從C#移植到Javascript時需要注意。

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

您調用的函數都在同一個腳本中。

直接打電話給他們。

playerMovement();
player2Movement();

另請注意播放器2運動上方代碼中的拼寫錯誤更改。

即使你修復了它,它也會編譯沒有錯誤,但由於以下原因無法正常工作:

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

因為你有不同的GameObject /球要移動。 在獲取每個參考的Rigidbody參考之前,您必須使用GameObject.Find來查找它們。

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

最后,控件搞砸了。 您正在使用相同的控件。 我認為這是一個糟糕的復制和粘貼或其他東西,但下面是你的整個工作代碼。

注意

在你說它不起作用之前,確保你的兩個GameObject /球被命名為Ball1Ball2 ,並確保舊的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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM