问题描述
我的代码没有引发任何错误,但是当我统一测试它时,这里的代码不起作用,我只想制作一个简单的移动代码:
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
}