関西Unity10期勉強会  第1回(6/15)

#0.概要
開始：19:03
終了：0:13

参加者：ぱうちゃん、やすみー、ちょむ、ぎんちゃん、スペック

#1.Slackについて

Q.Slackでスマホ版ではログインしたワークスペースが、PC版でログインされてない。
A.PC版でワークスペースの追加をやらないといけない。
　そのあとは左のところからワークスペースの切り替えができる。(画像参考)

![bc_YKkg9currZul1529121381_1529121398.jpg](https://qiita-image-store.s3.amazonaws.com/0/259396/43828473-1ff5-12bf-1c26-8bcbe7e422f0.jpeg)

Q.その時って再び 「〜さんが参加しました」って表示は出る？
A.それは出ない。

#2.スタミナ切れ、スタミナ回復を実装したい

<やりたい実装>
・5秒間だけダッシュができて、そのあとは5秒間押せないようにしたい　
  →途中で押すのをやめた場合は押せる時間は増えるし、再び押すこともできる
　 →5秒間押し切った場合は、5秒間は押せないようにしたい

<解決策>
フラグのふたつと、if文でできる

＜コード＞
flagはint型です。

```c#

if (Input.GetKey ("c")) {
	if (flag == 0) {
	timer += Time.deltaTime;

	if (timer > 5.0f) {
					timer = 5.0f;
					flag = 1;
				} else if (timer < 5.0f) {
					transform.position += transform.forward * 0.10f;
				} else if (flag == 1) {
				}
			}
		}else{
				timer -= Time.deltaTime;
				if(timer<0.0f){
					timer = 0.0f;
					flag =0;
				}
			}
```

<実際に実装してみた>

https://youtu.be/nhDqQ8SnzBw

#3.スタミナを可視化したい

<やりたい実装>
Slideを使ってスタミナの減りを表示したい。

<解決策>
timerをslider.valueにすればいい。

＜参考記事＞
https://qiita.com/2dgames_jp/items/31435fcef08dcd04c499

＜コード＞
※さっきのコードに付け加える

```c#
public class PlayerScriot : MonoBehaviour {
	private Slider slider;

void Start () {
	slider = GameObject.Find("Slider").GetComponent<Slider>();
}
void Update () {
//さっきのコードの一番下のelseの{}後に記述
slider.value = timer;

```

#4.ぱうちゃんがやってる武器切り替えのやり方がしりたい

<やりたい実装>
4個以上のGameobjectの切り替え

<解決策>
配列を使用して、武器をアクティブ、非アクティブにする。

<コード>
```c#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ArmsSelect : MonoBehaviour {


    //public int arraySize;
    public GameObject[] Arms; //全ての武器のgameobject格納

    public Sprite[] sprite; //全ての武器の画像を格納

    public GameObject selectedArm; //現在選択している武器のgameobject格納

    Image image; //現在選択している武器の画像を格納

    public GameObject SelectedImage; //シーンに表示している武器の画像のgameobjectを格納

    int i = 0; //武器のgameobjectや武器の画像の配列に使うループカウンタ

    AudioSource audioSource; //音源(スピーカー)
    public AudioClip gunSelect; //武器を変えた時の音


    // Use this for initialization
    void Start () {
        audioSource = gameObject.AddComponent<AudioSource>();
        audioSource.clip = gunSelect;
        image = SelectedImage.GetComponent<Image>(); //imageにシーンに表示するImageのコンポーネントを設定
        selectedArm = Arms[0]; //最初に選択している武器を設定
        i = 0; //ループカウンタを初期値に設定
    }
	
	// Update is called once per frame
	void Update () {
        //右矢印キーを押したとき武器を切り替える
        if (Input.GetKeyDown(KeyCode.RightArrow)) {
            audioSource.Play();
            selectedArm.SetActive(false); //現在選択している武器gameobjectを非アクティブにする
            i++;
            if (i >= Arms.Length){ //配列の要素数をループカウンタが越えるとまずいのでここでもう一度最初からスタート
                i = 0;
            }
            //武器や画像を切り替えてアクティブし直す
            selectedArm = Arms[i]; 
            image.sprite = sprite[i]; 
            selectedArm.SetActive(true); 
        }
        //左矢印キーを押したとき武器を逆順に切り替える
        if (Input.GetKeyDown(KeyCode.LeftArrow)){
            audioSource.Play();
            selectedArm.SetActive(false); //現在選択している武器gameobjectを非アクティブにする
            i--;
            if (i < 0)
            { //ループカウンタが0より小さくなるとまずいのでここでは最後の要素からスタート
                i = Arms.Length - 1;
            }
            //武器や画像を切り替えてアクティブし直す
            selectedArm = Arms[i]; 
            image.sprite = sprite[i]; 
            selectedArm.SetActive(true); 
        }

    }
  
}
```

<失敗例>

```c#

i=0;

//最初の武器以外全て非アクティブ

if(GetKeyDown(KeycodeA)){
i++
if(i==1){
1.SetActive(!1.activeSelf);
if (i==2){

}
・
・
・
if(i==6){
i=0;
}

```

切り替えはうまくいくかもしれないが、切り替えた時チカチカする。(ここら辺は一回実装してみるのがいいかも...)

ただ、中高生が配列をキャンプ中に理解するのはかなり無理があるから、使うのは厳しいかも。

5.最後に

かなり簡略化して書いているので、分からないことがあったらグループLINEか個人LINEで聞いてください！
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　書記：やすみー