C# 为什么团结说我不能打电话;GetKeyDown“;关于单一行为?
我的代码不会产生任何错误,但当我在unity中测试它时,它不会工作。这里是代码,我只想制作一个简单的运动代码: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
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
}