运行 Javascript Unity 上的代码给出错误。
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()
来调用它们的移动函数
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();
}
将代码从 移植到 Javascript 时需要注意。
player.playerMovement();
player2.playerMovement();
您调用的函数都在同一个脚本中。
直接打电话给他们就可以了。
playerMovement();
player2Movement();
还要注意 player2Movement.
上面的代码中错误的拼写更改
即使您修复了该问题,它也可以正常编译,但无法按预期工作,因为:
player = GetComponent.<Rigidbody>();
player2 = GetComponent.<Rigidbody>();
因为你有不同的GameObject/balls要移动。在获得每个人的 Rigidbody
引用之前,您必须使用 GameObject.Find
找到它们。
player = GameObject.Find("Ball1").GetComponent.<Rigidbody>();
player2 = GameObject.Find("Ball2").GetComponent.<Rigidbody>();
最后,控件搞砸了。您正在使用相同的控件。我认为这是一个糟糕的复制和粘贴之类的东西,但下面是你的整个工作代码。
注意:
在你说它不起作用之前,请确保你的两个 GameObject/balls 被命名为 Ball1 和 Ball2并确保旧的 C# cold 没有附加到它们上。代码已经过测试并且有效!
#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();
}
大家好尝试构建一个简单的游戏,
这是我的代码 当我 运行 这段代码给我的错误是 '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()
来调用它们的移动函数
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();
}
将代码从
player.playerMovement();
player2.playerMovement();
您调用的函数都在同一个脚本中。
直接打电话给他们就可以了。
playerMovement();
player2Movement();
还要注意 player2Movement.
上面的代码中错误的拼写更改即使您修复了该问题,它也可以正常编译,但无法按预期工作,因为:
player = GetComponent.<Rigidbody>();
player2 = GetComponent.<Rigidbody>();
因为你有不同的GameObject/balls要移动。在获得每个人的 Rigidbody
引用之前,您必须使用 GameObject.Find
找到它们。
player = GameObject.Find("Ball1").GetComponent.<Rigidbody>();
player2 = GameObject.Find("Ball2").GetComponent.<Rigidbody>();
最后,控件搞砸了。您正在使用相同的控件。我认为这是一个糟糕的复制和粘贴之类的东西,但下面是你的整个工作代码。
注意:
在你说它不起作用之前,请确保你的两个 GameObject/balls 被命名为 Ball1 和 Ball2并确保旧的 C# cold 没有附加到它们上。代码已经过测试并且有效!
#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();
}