我在这方面是全新的,我对这个代码提出了一些难题。我遵循了一个教程,我仍然遇到了一些问题。我想要做的就是将我附加此脚本的对象移动到名为Player的脚本,脚本是PlayerMovement。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public object Player(PlayerMovement) { // Identifier expected, and 'PlayerMovement.Player(PlayerMovement)' not all codes return a value
{
if (Input.GetKeyDown(KeyCode.W))
{
Transform.Translate(Vector3.forward * Time.deltaTime); //ERROR: An object reference is required for the non-static field, method or property 'Transform.Translate(vector3)
Debug.Log("W is pressed, and I should move forwards.");
}
if (Input.GetKeyDown(KeyCode.S))
{
Debug.Log("S is pressed, and I should move backwards.");
}
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log("A is pressed, and I should move left.");
}
if (Input.GetKeyDown(KeyCode.D))
{
Debug.Log("D is pressed, and I should move right.");
}
}
}
在第22行,我得到Identefier预期的2个错误,以及' PlayerMovement.Player(PlayerMovement)'并非所有代码都返回一个值。
在第29行我得到非静态字段,方法或属性需要对象引用' Transform.Translate(vector3)'
由于我是全新的,我一直在寻找几个小时的答案,每当我谷歌时,我遇到的任何答案并没有真正解释我做错了什么,或者我只是没有正确地阅读它
答案 0 :(得分:1)
第22行的错误是由Player类型为object的函数引起的,并且您不会在方法中返回一个对象。如果你替换:
public object Player(PlayerMovement)
使用:
public void Player(PlayerMovement)
该错误应该消失或你可以返回一个对象,但我不确定那是什么。
答案 1 :(得分:1)
首先,正如精神鲤鱼所说。程序将期望返回值,因此您应该返回一个值或将对象更改为 void
public object Player....
进入
public void Player....
然后主要的问题是你正在调用Transform.Translate而不是改变你的gameObject的实际转换。 如你所说,PlayerMovement脚本附加在你的玩家游戏对象上,所以目标是让游戏对象改变它的变换取决于键输入。尝试调用变换本身而不是类Transform。 transform是gameobject的实际变换,Transform是类,所以你要调用一个静态方法,而不是尝试使用this.transform.Translate
this.transform.Translate(Vector3.forward * Time.deltaTime);
然后最后要确保在更新方法中调用您的方法以使其正常工作