초보자 VR 엔지니어가 코드를 읽을 수있는 방법

14875 단어 NBackUnityC#VR

워킹 메모리를 단련하면 코드 모리모리 읽을 수 있는 설~! !



착상을 얻은 계기는 이 논문입니다! 간단한 기억력 테스트로는 VR공간 내의 쪽이 2D에서의 테스트에 비해 8.8% 높은 결과였다는 것입니다 👏 htps // t. 코 / y 치이 j49 0S 100 (@okprogramming) 10월 12, 2019


더 거슬러 올라가면 이 기사에서 N 백 과제에 대해 알았습니다.



초보자 프로그래머가 코드를 읽을 수있는 방법



제목은 팩이 아닌 존경의 증거입니다.



N 백 과제는?



얼마 전의 기억을 끌어내는 훈련을 함으로써,

워킹 메모리가 단련되어, 코드와의 쫓는 곳이 능숙해지는 것 같습니다.



놀이 방법



★준비

Oculus Quest에 Github에서 다운로드 한 apk를 찔러서 시작하고 끝입니다.

Github



먼저 빛나는 패널을 기억하고 기억하면서 선택하기만 하면 됩니다.

2백 정도부터 시작하면 룰을 알기 쉽다고 생각합니다.



올레올레 N 백 구현



여기서부터 주제입니다. 강한 여러분은 어떻게 구현할까요?

우선은 뇌 트레이닝으로 놀아보고, 자신이라면 어떻게 구현할 것이다,,,,

라는 관점에서 다시 놀면 두 번 맛있습니다.



슬라이더로 선택한 레벨 획득



우선 슬라이더로 선택한 레벨을 얻습니다.

아래 코드의 GetLevel() 로 취득한 회수분만 최초로 패널이 빛납니다.




LevelGetFromSlider.cs

using UnityEngine;
using UnityEngine.UI;

public class LevelGetFromSlider : MonoBehaviour
{
    Slider levelSlider;

    void Start()
    {
        levelSlider = this.gameObject.GetComponent<Slider>();
    }

    public int GetLevel()
    {
        return (int)levelSlider.value;
    }
}





패널이 레벨의 횟수만큼 자동으로 무작위로 빛난다



다음 코드에서는 다음을 수행합니다.

①모든 패널을 취득, 리스트화.

② 작성한 리스트에서 랜덤하게 하나를 선택.

③ 선택된 오브젝트 측에 부착된 클래스에서 빛나는 소리가 울리는 등의 메소드를 호출한다.

④ 선택된 객체를 나열한다.



위를 GetLevel() 로 취득한 회수분만큼 반복합니다.



또한, 다음의 패널측에서 호출할 예정인 ToNextSelect() 도 여기에 써 둡니다.




PanelSelected.cs


    [SerializeField, Header("選ばれる間隔を操作")] 
    float m_interval = 2;

    List<GameObject> m_tmpListObj = new List<GameObject>();

    [HideInInspector]
    public List<GameObject> g_listObj = new List<GameObject>();

    float m_randomValue;

    void Start()
    {
        //子のオブジェクトを全部リストに入れとく
        foreach(Transform child in this.gameObject.transform)
        {
            m_tmpListObj.Add(child.gameObject);
        }
    }

    //Startボタン押したら呼ばれる
    public void AutoSelectStart()
    {
        StartCoroutine(AutoSelectStartCoroutine());
    }

    //レベルに応じて自動で選ばれる回数を変える
    IEnumerator AutoSelectStartCoroutine()
    {
        for(int i = 0; i < m_levelGetFromSlider.GetLevel(); i++)
        {
            yield return new WaitForSeconds(m_interval);

            //ここでどれが選ばれるかランダムに決める
            m_randomValue = Random.Range(0, m_tmpListObj.Count);

            //選ばれたときのイベント呼び出し
            m_tmpListObj[(int)m_randomValue].GetComponent<PanelSelectedEvent>().BlinkPanel();
            m_tmpListObj[(int)m_randomValue].GetComponent<PanelSelectedEvent>().CorrectSoundPlay();

            //選んだオブジェクトをリスト化する
            g_listObj.Add(m_tmpListObj[(int)m_randomValue]);
        }

    }

    //レーザーで選んだら次が光ってリストを更新
    public void  ToNextSelect()
    {
        //ここでどれが選ばれるかランダムに決める
        m_randomValue = Random.Range(0, m_tmpListObj.Count);

        //選ばれたときのイベント呼び出し
        m_tmpListObj[(int)m_randomValue].GetComponent<PanelSelectedEvent>().BlinkPanel();

        //選んだオブジェクトをリスト化する
        g_listObj.Add(m_tmpListObj[(int)m_randomValue]);
    }



게임 시작까지 처리가 완료되었습니다.



패널을 선택하여 정답 부정해 결정



여기에서는 실제로 패널을 선택한 후의 판정으로 이동합니다.

판정은 패널측에서 개별적으로 실시합니다.



가는 일은 매우 간단합니다.

① 조금 전의 리스트를, 준비한 인덱스로 지정해 호출해, 자신과 대조한다.

②합치하고 있으면 정해음과 다음의 패널이 선택되는 처리를 실행해, 준비한 인덱스를 인크리먼트.



잘못된 경우 증가하지 않고 실수 SE를 재생하면 됩니다.

또, 인크리먼트 한 인덱스의 수로부터 게임 클리어시의 판정도 실시하고 있습니다.




PanelSelectedEvent.cs

    //このスクリプトはパネルにアタッチされたスクリプトです

    //何回選ぶか エンドレスモードがあればここをめちゃくちゃでかい数字に変えればOK
    int m_playTime = 10;
    static int m_selectedCount;

    //先程のリストを取ってくる
    PanelSelected m_panelSelected;

    void Start()
    {
        m_selectedCount = 0;
        m_panelSelected = this.gameObject.GetComponentInParent<PanelSelected>();
    }

    //選んだものが同じかどうか判定して選択カウント増加
    public void IncrementSelectedCount()
    {
        if (m_selectedCount < m_playTime)
        {
            if (m_panelSelected.g_listObj[m_selectedCount] == this.gameObject)
            {
                m_panelSelected.ToNextSelect();
                CorrectSoundPlay();
                m_selectedCount++;
            }
            else
            {
                WrongSoundPlay();
            }
        }
        else
        {
            if (m_panelSelected.g_listObj[m_selectedCount] == this.gameObject)
            {
                CorrectSoundPlay();
                m_selectedCount++;

                if (m_selectedCount == m_playTime + m_levelGetFromSlider.GetLevel())
                {
                    //ここにクリア時の処理
                    m_clear.ClearTextAppear();
                }
            }
            else
            {
                WrongSoundPlay();
            }
        }
    }



요약



만들고 이런 말을 하는 것도 됩니다만,

프로그램을 읽을 수 있게 되고 싶다면 프로그램을 읽으면 좋겠다고 생각합니다.

고마워요.


좋은 웹페이지 즐겨찾기