unity3d 尝试使用C#在Unity中自上而下移动2D字符,值错误“当前上下文中不存在”[已关闭]

sczxawaw  于 2023-02-16  发布在  C#
关注(0)|答案(1)|浏览(181)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我正在尝试在2D空间中移动一个角色,自上而下。我是C#的新手,我一直在学习一些教程,学习如何使用简单的WASD移动2D角色。请对我放松点。请忽略射击部分

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

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 1f;
    private Rigidbody2D rb2d;
    [SerializeField] private Camera cam;
    [SerializeField] private GameObject gunPoint;
    private Vector2 moveInput;

    // Start is called before the first frame update
    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        CheckCursor();

    }

    private void FixedUpdate()
    {
        Movement();
    }

    private void CheckCursor()
    {
        Vector3 mousePos = cam.ScreenToWorldPoint(Input.mousePosition);
        Vector3 characterPos = transform.position;
        if (mousePos.x > characterPos.x)
        {
            this.transform.rotation = new Quaternion(0, 0, 0, 0);
        }
        else if (mousePos.x < characterPos.x)
        {
            this.transform.rotation = new Quaternion(0, 180, 0, 0);
        }
            
        
        // TODO : Implementasi player shooting
        
    }

    private void Movement()
    {
        // TODO : Implementasi movement player
        rb2d.MovePosition(rb2d.position + moveInput * moveSpeed * Time.fixedDeltaTime);
        
    }

    void onMove(InputValue input)
    {
        moveInput = value.Get<Vector2>();
    }

}

Unity中出现的错误是:资源/脚本/播放器控制器. cs(59,21):错误CS0103:当前上下文中不存在名称"value"。
我试着安装InputSystem包,我试着更改一些代码以更适合此代码,我检查了其他代码示例,遗憾的是无济于事。
感谢您的阅读,我感谢任何反馈,包括我是多么的笨,我应该如何学习C#正确的第一。

2w2cym1i

2w2cym1i1#

在函数onMove中,传递一个InputValue类型的参数,其名称为input。
考虑到这个InputValue类有一个返回Vector2的Get成员,因此您需要使用与传递的参数(这里是input)相同的名称,将结果赋给私有成员moveInput:

void onMove(InputValue input)
{
    moveInput = input.Get<Vector2>(); // input.Get ... instead of value.Get
}

编辑以回答您的编辑:对于新的输入系统,这里有一个视频代码猴子解释它很好How to use NEW Input System Package
我也推荐你看一下它的新Tutorial,它涵盖了很多关于Unity和整个游戏开发过程的内容,看看它关于事件的具体视频。
即使另一个youtube用户Brackeys的一些视频现在已经很老了,但他是一个开门见山的好老师。

相关问题