简体   繁体   English

角色控制器的字典功能

[英]Dictionary function for Character Controller

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

    public class Keyboard_Input : MonoBehaviour {
        public float speed = 5f;

        void Start () {

            Dictionary<KeyCode, Vector3> directions = new Dictionary<KeyCode, Vector3>();
        {
            directions.Add(KeyCode.W, Vector3.forward );
            directions.Add(KeyCode.S, Vector3.back );
            directions.Add(KeyCode.A, Vector3.left );
            directions.Add(KeyCode.D, Vector3.right );
        };
        }


         void Update () {

            foreach(KeyValuePair<KeyCode, Vector3> direction in directions)
             {
                if (Input.GetKey(directions))
                {

                    this.transform.Translate(directions[direction] * speed * Time.deltaTime, Space.Self);
                }
            }
        }
    }

1.So I get an error for each time I write directions- The name 'directions' does not exist in the current context This happens on lines 25,27,30 1.所以每次写路线时都会出错—当前上下文中不存在“路线”名称,这发生在第25、27、30行

You're declaring directions within the Start method, so it's a local variable. 您在Start方法中声明directions ,因此它是一个局部变量。 You should declare it as a field - and I'd make it a static field, as you don't need a different dictionary for each instance. 您应该将其声明为字段-并且我将其设置为静态字段,因为您无需为每个实例使用不同的字典。 You can use a collection initializer to initialize it all in one expression: 您可以使用集合初始化程序在一个表达式中将其全部初始化:

private static readonly Dictionary<KeyCode, Vector3> directions =
    new Dictionary<KeyCode, Vector3>
    {
        { KeyCode.W, Vector3.forward },
        { KeyCode.S, Vector3.back },
        { KeyCode.A, Vector3.left },
        { KeyCode.D, Vector3.right }
    };

You use {}; 你用 {}; where you shouldn't do it in dictionary initialization. 在字典初始化中不应该这样做的地方。

 void Start () 
 {
        Dictionary<KeyCode, Vector3> directions = new Dictionary<KeyCode, Vector3>();
        directions.Add(KeyCode.W, Vector3.forward );
        directions.Add(KeyCode.S, Vector3.back );
        directions.Add(KeyCode.A, Vector3.left );
        directions.Add(KeyCode.D, Vector3.right );
 }

or you can initialize it with collection initializer: 或者您可以使用集合初始值设定项对其进行初始化:

 void Start () 
 {
        var directions = new Dictionary<KeyCode, Vector3>
        {
            { KeyCode.W, Vector3.forward },
            { KeyCode.S, Vector3.back },
            { KeyCode.A, Vector3.left },
            { KeyCode.D, Vector3.right}
        };
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM