为什么统一说我不能在单声道行为上调用“GetKeyDown”?

问题描述

我的代码没有引发任何错误,但是当我统一测试它时,这里的代码不起作用,我只想制作一个简单的移动代码

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

}

我第一次尝试统一编辑器时说我不能在 MonobehavIoUr 上调用“GetKeyDown”,但我看到的教程使用相同的逻辑和工作,加上这些错误消息突然消失了。有人能指出我做错了什么吗?

解决方法

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

,

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

另外,我想指出的一件事是,在 start 方法之前键入变量名称。这不是必需的,但绝对是大多数人采用的方式。 示例:

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
}