Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么团结说我不能打电话;GetKeyDown“;关于单一行为?_C#_Visual Studio_Unity3d - Fatal编程技术网

C# 为什么团结说我不能打电话;GetKeyDown“;关于单一行为?

C# 为什么团结说我不能打电话;GetKeyDown“;关于单一行为?,c#,visual-studio,unity3d,C#,Visual Studio,Unity3d,我的代码不会产生任何错误,但当我在unity中测试它时,它不会工作。这里是代码,我只想制作一个简单的运动代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class player : MonoBehaviour { private void start() { } void update() { if (Walk_right) tr

我的代码不会产生任何错误,但当我在unity中测试它时,它不会工作。这里是代码,我只想制作一个简单的运动代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player : MonoBehaviour
{


private void start()
{
  

 

}

void update()
{

  if (Walk_right) 
   transform.position += Time.deltaTime * Walk_speed * Vector3.right;

  if (Walk_left) 
   transform.position += Time.deltaTime * Walk_speed * Vector3.left;

  if (Walk_up) 
   transform.position += Time.deltaTime * Walk_speed * Vector3.forward;

  if (Walk_down) 
   transform.position += Time.deltaTime * Walk_speed * Vector3.back;

  
}

[SerializeField] private float Walk_speed = 5f;
[SerializeField] private float Run_speed = 10f;
[SerializeField] private bool Walk_right => Input.GetKeyDown(KeyCode.D);
[SerializeField] private bool Walk_left => Input.GetKeyDown(KeyCode.A) ;
[SerializeField] private bool Walk_up => Input.GetKeyDown(KeyCode.W) ;
[SerializeField] private bool Walk_down => Input.GetKeyDown(KeyCode.S);
}


我第一次尝试unity editor时说,我不能在MonoBehavior上调用“GetKeyDown”,但我看到的教程使用了相同的逻辑,并且有效,加上这些错误消息突然消失。有人能指出我做错了什么吗?

我认为您必须更改更新并以更新和启动的方式启动。Unity在函数名中使用Pascal大小写。

我认为您必须将update和start更改为update和start。Unity在函数名中使用Pascal大小写。

将“void update”和“void start”更改为“void update”和“void start”。 将单词的第一个字母大写,因为它们是函数名。 预定义的函数名区分大小写。因此,Unity无法以您编写函数名的方式识别函数名,因此,您给出的命令将被忽略而不会执行

还有一件事我想指出,在start方法之前键入变量名。这是没有必要的,但肯定是大多数人的做法。 例如:


将“作废更新”和“作废开始”更改为“作废更新”和“作废开始”。 将单词的第一个字母大写,因为它们是函数名。 预定义的函数名区分大小写。因此,Unity无法以您编写函数名的方式识别函数名,因此,您给出的命令将被忽略而不会执行

还有一件事我想指出,在start方法之前键入变量名。这是没有必要的,但肯定是大多数人的做法。 例如:


设置中断指针以查看它是如何工作的?'update()'->'update()'怎么样?与问题无关,但我会从最后4个变量(
Walk_right
,…等)中删除
SerializeField
属性,因为Unity无法序列化。设置中断指针以查看它是如何工作的?'update()'->'update()'怎么样?与问题无关,但我会从最后4个变量(
Walk_right
,…等)中删除
SerializeField
属性,因为Unity无法序列化。但是函数名到底有什么问题?为什么unity无法识别它?@danielsantos你已经用小写字母输入了whee的名字。函数名的第一个字母应该是大写的。像“更新”而不是“更新”。就像我在示例中添加的一样。哦,明白了,伙计,谢谢你帮助一个新手@非常欢迎danielsantos,我也是个新手。如果它有助于解决您的问题,请记住接受它作为答案。:)但是函数名到底出了什么问题?为什么unity无法识别它?@danielsantos你已经用小写字母输入了whee的名字。函数名的第一个字母应该是大写的。像“更新”而不是“更新”。就像我在示例中添加的一样。哦,明白了,伙计,谢谢你帮助一个新手@非常欢迎danielsantos,我也是个新手。如果它有助于解决您的问题,请记住接受它作为答案。:)
public class player : MonoBehaviour
{
[SerializeField] private float Walk_speed = 5f;
[SerializeField] private float Run_speed = 10f;
[SerializeField] private bool Walk_right => Input.GetKeyDown(KeyCode.D);
[SerializeField] private bool Walk_left => Input.GetKeyDown(KeyCode.A) ;
[SerializeField] private bool Walk_up => Input.GetKeyDown(KeyCode.W) ;
[SerializeField] private bool Walk_down => Input.GetKeyDown(KeyCode.S);

private void Start()
{
  
//Start Code here
}

private void Update()
{
//Update Code here
}