[英]Javascript switch statement is giving me an error. what is going on?
[英]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 /球被命名为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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.