ゲームプログラマーの寄り道

ゲームプログラマの寄り道

ソースコード公開系ブログ

ソースコード公開系ブログ

マジックナンバーを駆逐せよ!

10回だけ処理をするプログラムを書くとき、こう書いてますか?

10回処理コード

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

public class Hoge : MonoBehaviour {
    int value = 0;
    void Start()
    {
    }
    void Update()
    {
        if (value < 10)
        {
            Debug.Log("Play!!");
            ++value;
        }
    }
}

はい、こんな事をしてしまったら、膝蹴りが飛んで来ますね。
https://img.gifmagazine.net/gifmagazine/images/7879/original.gif

なので、マジックナンバーを消してみるとこうなります。

マジックナンバー駆逐

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Hoge : MonoBehaviour {
    int value = 0;
    int number = 10;
    void Start()
    {
    }
    void Update()
    {
        if (value < number)
        {
            Debug.Log("Play!!");
            ++value;
        }
    }
}

こうなりますが、こうするとカウント部分と条件部分で変数が二つになってしまいます。
変数はなるべく、見栄えの部分とメモリの為に増やしたくない。
実際に変数を減らした上でマジックナンバーを使わない方法を考えてみた。

変数減らしたコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Hoge : MonoBehaviour {
    int value = 10;
    void Start()
    {
    }
    void Update()
    {
        if (-value != value)
        {
            Debug.Log("Play!!");
            --value;
        }
    }
}

こうすると変数も一つで、マジックナンバー警察も来ないというプログラムの出来上がり。
ただ、少し変態的なソースコードになりました。
https://img.gifmagazine.net/gifmagazine/images/647670/original.gif

***募集***
一緒にブログを運営してくれる人募集しています。
主な作業は修理作業です。画像足りなかったら拾ってくるとか、誤字の修正などです。
見出し増やすなど、見た目に関する所お願いします。
Twitterに連絡くれれば反応できます。

しんーーご (@shi_k_7) | Twitter

フェードイン・フェードアウトするUIプログラム

www.youtube.com

早い話がボンバーマンみたいなREADY、GOみたいな演出がしたかったんです。
また、量産型クソコード

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

public class UIstart : MonoBehaviour {
   
    private RectTransform hoge;
	private int frame = 0;
    private RectTransform ret;
    private RectTransform go;
    private RectTransform end;
    private RectTransform hurry;
    int i= -10;
    TimerScript timerScript;
    float j = -1.5f;
    int end_frame = 0;
    void Start()
    {
        hoge = transform.GetChild(0).gameObject.GetComponent<RectTransform>();
		hoge.sizeDelta = new Vector2(1920, -30);
        ret = transform.GetChild(1).gameObject.GetComponent<RectTransform>();
        ret.localPosition = new Vector3(1500, 0, 0);
        go = transform.GetChild(2).gameObject.GetComponent<RectTransform>();
        go.localPosition = new Vector3(1500, 0, 0);
        hurry = transform.GetChild(3).gameObject.GetComponent<RectTransform>();
        hurry.localPosition = new Vector3(1500, 0, 0);
        timerScript= GetComponent<TimerScript>();
        end = transform.GetChild(4).gameObject.GetComponent<RectTransform>();
        end.localPosition = new Vector3(1500, 200, 0);
    }

    // Update is called once per frame
    void Update()
    {
        if (timerScript.count <= 0)
        {
            ++end_frame;
        }
       
        if (frame <= 10 || (timerScript.count <= 0 && end_frame <= 10))
        {
            if(timerScript.count <= 0 && end_frame == 1)
            {
                hoge.localPosition= new Vector3(0, 200, 0);
            }
            hoge.sizeDelta += new Vector2(0, 30);
        }
        else if (20 < frame && frame <= 30)
        {
            ++i;
            ret.localPosition = new Vector3(1500.0f * (Mathf.Pow(i, 2) / 100.0f), 0, 0);

        }
        else if (50 < frame && frame <= 60)
        {
            ++i;
            ret.localPosition = new Vector3(1500.0f * (-Mathf.Pow(i, 2) / 100.0f), 0, 0);

        }
        else if (70 < frame && frame <= 80)
        {
            ++i;
            go.localPosition = new Vector3(1500.0f * (Mathf.Pow(i, 2) / 100.0f), 0, 0);
        }
        else if (90 < frame && frame <= 100)
        {
            ++i;
            go.localPosition = new Vector3(1500.0f * (-Mathf.Pow(i, 2) / 100.0f), 0, 0);
            hoge.sizeDelta -= new Vector2(0, 30);
        }
        if (timerScript.count <= 60 && j <= 1.5f)
        {
            j += 0.025f;
            hurry.localPosition = new Vector3(1500.0f * (-Mathf.Tan(j) / 15.0f), 0, 0);
        }
        if(timerScript.count <= 0 && 20 < end_frame && end_frame <= 30)
        {
            ++i;
            end.localPosition = new Vector3(1500.0f * (Mathf.Pow(i, 2) / 100.0f), 200, 0);
        }
        if (i>=10)
        {
            i = -10;
        }
		++frame;
	}
}

#1

 if (timerScript.count <= 60 && j <= 1.5f)
        {
            j += 0.025f;
            hurry.localPosition = new Vector3(1500.0f * (-Mathf.Tan(j) / 15.0f), 0, 0);
        }

ここだけtanの値をつかって画面中央辺りに来たらゆっくりになる奴にしてます。

***募集***
一緒にブログを運営してくれる人募集しています。
主な作業は修理作業です。画像足りなかったら拾ってくるとか、誤字の修正などです。
見出し増やすなど、見た目に関する所お願いします。
Twitterに連絡くれれば反応できます。

しんーーご (@shi_k_7) | Twitter

ゲームパッドを使用した4人同時入力

assetstore.unity.com
このアセットを使用した4人入力です。

過去のクソコードです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GamepadInput; 
public class Player : Type
{
    //プレイヤーの動くスピード
    public float speed;
    //プレイヤーの体力
    public int HP;
    public bool shot;
    GameObject child;
	public GameObject clown;
    public GameObject Resurrection;
    PlayerGeneretion generetion;
    public int PlayerNumber;
    public Vector3 V3;
    TimerScript timerScript;
    public AudioClip DamageSound;
    public AudioClip ResuscitationSound;
    public AudioClip ItemSound;
    public AudioClip ItemSoundRare;
    public int sound;
    public int soundRare;
    public float ShotDelete;
    public bool alive;
	GameObject Obj;
    Phase ph;
	bool one=true;
    public enum PlayerNo
    {
        none,
        one,
        two,
        three,
        four
    }
    public PlayerNo playerNo;

    //初期化
    void Start()
    {
        alive = true;
        speed = 6;
        ShotDelete = 15;
        V3 = transform.position;
        HP = 3;
        child = transform.Find("shot_point").gameObject;
        timerScript= GameObject.Find("Canvas").GetComponent<TimerScript>();
        generetion = GameObject.Find("GeneretionPlayer").GetComponent<PlayerGeneretion>();
        ph = GameObject.Find("Phase").GetComponent<Phase>();
    }
    void Update()
    {
		if(Rank.win== (int)playerNo&&one)
		{
			Obj = (GameObject)Instantiate(clown, this.transform.position+new Vector3(0,3,0), Quaternion.identity);
			Obj.transform.parent = transform;
			one = false;
		}else if(Rank.win != (int)playerNo)
		{
			foreach (Transform child in transform)
			{
				if (child.name == "SI_CrownIcon(Clone)")
				{
					GameObject.Destroy(child.gameObject);
				}
			}
			one = true;
		}
        if (HP <= 0)
        {
            alive = false;
            ++sound;
            if (sound > 120)
            {
                sound = 0;
                Destroy();
                Destroy(gameObject);
            }
        }
        Movingrotation();
    }
    //移動回転処理
    private void Movingrotation()
    {
        GamepadState keyState1 = GamePad.GetState(GamePad.Index.One);
        GamepadState keyState2 = GamePad.GetState(GamePad.Index.Two);
        GamepadState keyState3 = GamePad.GetState(GamePad.Index.Three);
        GamepadState keyState4 = GamePad.GetState(GamePad.Index.Four);
        if ((alive == true&&timerScript.count>0)&&ph.Starttime == true)
        {
            //1P
            if (playerNo == PlayerNo.one)
            {
                //押されたキーの向きに向く
                if (keyState1.Down || keyState1.Up || Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.DownArrow))
                {
                    if (keyState1.Up || Input.GetKey(KeyCode.UpArrow))
                    {
                        transform.eulerAngles = new Vector3(0, 0, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, 180, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }else
                if (keyState1.Right || keyState1.Left || Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))
                {
                    if (keyState1.Right || Input.GetKey(KeyCode.RightArrow))
                    {
                        transform.eulerAngles = new Vector3(0, 90, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, -90, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }
            }
            //2P
            if (playerNo == PlayerNo.two)
            {
                //押されたキーの向きに向く
                if (keyState2.Down || keyState2.Up || Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S))
                {
                    if (keyState2.Up || Input.GetKey(KeyCode.W))
                    {
                        transform.eulerAngles = new Vector3(0, 0, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, 180, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }
				else
				if (keyState2.Right || keyState2.Left || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D))
                {
                    if (keyState2.Right || Input.GetKey(KeyCode.D))
                    {
                        transform.eulerAngles = new Vector3(0, 90, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, -90, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }
            }
            //3P
            if ((playerNo == PlayerNo.three))
            {
                //押されたキーの向きに向く
                if (keyState3.Down || keyState3.Up || Input.GetKey(KeyCode.T) || Input.GetKey(KeyCode.G))
                {
                    if (keyState3.Up || Input.GetKey(KeyCode.T))
                    {
                        transform.eulerAngles = new Vector3(0, 0, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, 180, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }
				else
				if (keyState3.Right || keyState3.Left || Input.GetKey(KeyCode.F) || Input.GetKey(KeyCode.H))
                {
                    if (keyState3.Right || Input.GetKey(KeyCode.H))
                    {
                        transform.eulerAngles = new Vector3(0, 90, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, -90, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }
            }
            //4P
            if (playerNo == PlayerNo.four)
            {
                //押されたキーの向きに向く
                if (keyState4.Down || keyState4.Up || Input.GetKey(KeyCode.I) || Input.GetKey(KeyCode.K))
                {
                    if (keyState4.Up || Input.GetKey(KeyCode.I))
                    {
                        transform.eulerAngles = new Vector3(0, 0, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, 180, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }
				else
				if (keyState4.Right || keyState4.Left || Input.GetKey(KeyCode.J) || Input.GetKey(KeyCode.L))
                {
                    if (keyState4.Right || Input.GetKey(KeyCode.L))
                    {
                        transform.eulerAngles = new Vector3(0, 90, 0);
                    }
                    else
                    {
                        transform.eulerAngles = new Vector3(0, -90, 0);
                    }
                    //今向いている方向に移動する
                    transform.position += transform.forward * speed * Time.deltaTime;
                }
            }
        }
    }
    private void OnTriggerEnter(Collider other)
    {
        //当たったものが弾なら入る
        if (other.gameObject.GetComponent<Type>().objtype == Objtype.bullet)
        {
            //弾の発射元じゃないならHPを減らす
            if (other.gameObject.GetComponent<Bullet>().ShotPlayer != gameObject)
            {
                --HP;
                if (HP != 0)
                {
                    GetComponent<AudioSource>().PlayOneShot(DamageSound);
                }
                else
                {
                    GetComponent<AudioSource>().PlayOneShot(ResuscitationSound);
                }
            }
        }
        if (other.GetComponent<Type>().objtype == Objtype.item)
        {
            soundRare = Random.Range(0, 10);
            if (soundRare != 5)
            {
                GetComponent<AudioSource>().PlayOneShot(ItemSound);
            }
            else
            {
                GetComponent<AudioSource>().PlayOneShot(ItemSoundRare);
            }
        }
    }
    private void Destroy()
    {
        generetion.vs[PlayerNumber] = false;
        //Instantiate(Resurrection, V3, Quaternion.identity);
        switch ((int)playerNo)
        {
            case 1:
                ++Rank.no_1;
                break;
            case 2:
                ++Rank.no_2;
                break;
            case 3:
                ++Rank.no_3;
                break;
            case 4:
                ++Rank.no_4;
                break;
            default:
                break;
        }
    }
}
***募集***
一緒にブログを運営してくれる人募集しています。
主な作業は修理作業です。画像足りなかったら拾ってくるとか、誤字の修正などです。
見出し増やすなど、見た目に関する所お願いします。
Twitterに連絡くれれば反応できます。

しんーーご (@shi_k_7) | Twitter

LogitechGSDKのバグ?ハンドルコントローラの状態が取得できない。

assetstore.unity.com
こちらのアセットを使っているのですが、ノートパソコンに持って来て開発しようとした時。

ハンコンの値が取れん!?

原因

//LogitechGSDK.cs
//593行
 try
        {
            ret = (DIJOYSTATE2ENGINES)Marshal.PtrToStructure(LogiGetStateENGINES(index), typeof(DIJOYSTATE2ENGINES));
        }
        catch (System.ArgumentException)
        {
            Debug.Log("Exception catched");
        }

catchに入ってしまう。>||LogiGetStateENGINES(index)||<と>||typeof(DIJOYSTATE2ENGINES)||<を >||Debug.Log||<してみると、
>||LogiGetStateENGINES(index)||<が取れてない
DIJOYSTATE2構造体の単純化バージョンが返ってくるらしい。戻り値の型はIntPtrで32ビットのポインタ。
早い話がコントローラの状態が取れていないか、コントローラのポインタが取れていないということだ。
DLLがC++なので、分からない。


***募集***
一緒にブログを運営してくれる人募集しています。
主な作業は修理作業です。画像足りなかったら拾ってくるとか、誤字の修正などです。
見出し増やすなど、見た目に関する所お願いします。
Twitterに連絡くれれば反応できます。

しんーーご (@shi_k_7) | Twitter

Unityでの壁貫通しない三人称カメラのソースコード

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

public class CheckObstacles : MonoBehaviour {
    // カメラの元の位置
    [SerializeField]
    private Vector3 cameraPrePosition;
    [SerializeField]
    private Transform player;
    private RaycastHit hit;
    // カメラの移動スピード
    [SerializeField]
    private float cameraMoveSpeed = 3f;
    private const float _distance = 5.2f;//
    private Vector3 _offset = new Vector3(0f, 1.0f, -_distance);

    private Vector3 _lookDown = new Vector3(30f, 0f, 0f);
    [SerializeField]
    bool ON=true;
    void Start()
    {
        // player = transform.root;
        // 初期位置を設定
        transform.position = player.TransformPoint(_offset);
        transform.LookAt(player/*, Vector3.up*/);
    }
    void Update()
    {
  Vector3 desiredPosition = player.TransformPoint(_offset);
            if (desiredPosition.y < player.position.y)
            {
                desiredPosition.y = player.position.y;
            }

        // カメラが障害物と接触してたら障害物の場所に移動
        if (Physics.Linecast(player.position/* + Vector3.up*/, transform.position, out hit, LayerMask.GetMask("Field", "Enemy", "EnemyHit"))&& Vector3.Distance(player.position,transform.position)< _distance)
        {
            transform.position = Vector3.Lerp(transform.position, hit.point, cameraMoveSpeed * Time.deltaTime);
            
            // 障害物と接触してなければ元のカメラ位置に移動
        }
        else if(ON)
        {
          
            Vector3 lerp = Vector3.Lerp(transform.position, desiredPosition, cameraMoveSpeed * Time.deltaTime);
            Vector3 toTarget = player.position - lerp;
            toTarget.Normalize();
            toTarget *= _distance;
            transform.position = player.position - toTarget;
            // 元の位置ではない時だけ元の位置に移動
            //if (transform.localPosition != cameraPrePosition)
            //{
            //    transform.localPosition = Vector3.Lerp(transform.localPosition, cameraPrePosition, cameraMoveSpeed * Time.deltaTime);
            //}
        }
        transform.LookAt(player/*, Vector3.up*/);
   //     transform.Rotate(_lookDown);
        // レイを視覚的に確認
        Debug.DrawLine(player.position /*+ Vector3.up*/, transform.position, Color.red, 0f, false);
    }
    //オブジェクトが衝突したとき
    void OnTriggerEnter(Collider other)
    {
        ON = false;
    }

    //オブジェクトが離れた時
    void OnTriggerExit(Collider other)
    {
        ON = true;
    }

    //オブジェクトが触れている間
    void OnTriggerStay(Collider other)
    {
        if(Vector3.Distance(player.position, transform.position) >= _distance)
        {
            ON = true;
        }
    }
}
***募集***
一緒にブログを運営してくれる人募集しています。
主な作業は修理作業です。画像足りなかったら拾ってくるとか、誤字の修正などです。
見出し増やすなど、見た目に関する所お願いします。
Twitterに連絡くれれば反応できます。

しんーーご (@shi_k_7) | Twitter

UntiyのInput.GetAxisより使える入力

https://shin-go.hatenablog.com/entry/2018/11/26/184502shin-go.hatenablog.com
ここで使ってる自作Horizontalについてです。
Horizontal使いやすいが同時入力がKUSOなんで同時入力可能なInput.GetAxis("Horizontal")を作ろうということです。
基本にVerticalも同じです。
同時入力、だんだん上がる、だんだん下がるに対応してます。

  float KeySteer()
	{
		if (Input.GetKey(KeyCode.D))
		{
			keySteer += SPEED;
		}
		if (Input.GetKey(KeyCode.A))
		{
			keySteer -= SPEED;
		}
		if ((!Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.D)) || (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.D)))
		{
			if (0 < keySteer)
			{
				keySteer -= SPEED;
			}
			else if (keySteer < 0)
			{
				keySteer += SPEED;
			}
		}
		if (-SPEED < keySteer && keySteer < SPEED)
			keySteer = 0;

		if (keySteer < -1)
		{
			keySteer = -1;
		}
		else if (1 < keySteer)
		{
			keySteer = 1;
		}

		return keySteer;
	}
***募集***
一緒にブログを運営してくれる人募集しています。
主な作業は修理作業です。画像足りなかったら拾ってくるとか、誤字の修正などです。
見出し増やすなど、見た目に関する所お願いします。
Twitterに連絡くれれば反応できます。

しんーーご (@shi_k_7) | Twitter

LogicoolSDKを使ったハンドル入力

現状以下の二つ+キーボードに対応した形となってます。
https://www.amazon.co.jp/%E3%80%90Amazon-co-jp%E9%99%90%E5%AE%9A%E3%80%91Logicool-%E3%83%AD%E3%82%B8%E3%82%AF%E3%83%BC%E3%83%AB-LPRC-15000-%E3%83%89%E3%83%A9%E3%82%A4%E3%83%93%E3%83%B3%E3%82%B0%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B9-Logicool/dp/B07B9HR5CR?th=1www.amazon.co.jp

ec.treasure-f.com

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using UnityEngine.UI;
using System.Text;

public class CarInput : MonoBehaviour
{  
    Func<int, float> RoundValue = (value) => { return (value == 0) ? 0.0f : 1.0f - ((float)(value - Int16.MinValue) / (float)UInt16.MaxValue); };
   
    /*定数----------------------------------*/
    const byte PUSH = 128;
    const int LEFT = 5;
    const int RIGHT = 4;
    const int LOW = 12;
    const int REVERSE = 18;
    const int UP = 12;
    const int DOWN = 13;
    const int PLAY = 20;//遊びの範囲(度数)要調整
    const float RANGE = ((float)PLAY*0.5f)/180.0f * (float)Int16.MaxValue;//遊びの範囲
const float SPEED = 0.1f;
	const int TOP = 6;
    const float BRAKE = 0.6f;
 /*-----------------------------------------*/

    /*クラス内変数---------------------------*/
    bool isShiftLever = false;//シフトレバーが入っているか
    bool isShiftPaddle = false;//パドル押されているか
    bool preIsShiftLever = false;//前フレーム情報
    bool preIsShiftPaddle = false;//前フレーム情報

	int shiftLever = 1;
    int shiftNumber = 1;
    bool logicoolG29 = false;//G29かどうか
    LogitechGSDK.LogiControllerPropertiesData properties;
    LogitechGSDK.DIJOYSTATE2ENGINES rec;
    float keyBrake = 0.0f;
	float keyAccel = 0.0f;
	float keySteer = 0.0f;
    float handleSteer = 0.0f;
    /*--------------------------------------*/


    /*プロパティ-----------------------------*/
    public float Accel { private set; get; }
    public float Brake { private set; get; }
    public float Steer { private set; get; }
    public float Clutch { private set; get; }
    public int ShiftNumber { private set { shiftNumber = value; } get { return shiftNumber; } }
    /*--------------------------------------*/
    void Start()
    {
		properties = new LogitechGSDK.LogiControllerPropertiesData();
		properties.forceEnable = false;
		properties.overallGain = 100;
		properties.springGain = 100;
		properties.damperGain = 100;
		properties.defaultSpringEnabled = true;
		properties.defaultSpringGain = 100;
		properties.combinePedals = false;
		properties.wheelRange = 360;//ハンドル取得範囲

		properties.gameSettingsEnabled = false;
		properties.allowGameSettings = false;

		LogitechGSDK.LogiSetPreferredControllerProperties(properties);//上書き
		LogitechGSDK.LogiSteeringInitialize(false);

	}
	void Update()
    {
        LogitechGSDK.LogiControllerPropertiesData actualProperties = new LogitechGSDK.LogiControllerPropertiesData();
        LogitechGSDK.LogiGetCurrentControllerProperties(0, ref actualProperties);
        Debug.Log("actualProperties.wheelRange" + actualProperties.wheelRange);
        if (Input.GetKey(KeyCode.UpArrow))
        {
            LogitechGSDK.LogiPlaySpringForce(0,10,50,50);
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            LogitechGSDK.LogiPlaySpringForce(0, 0, 10, 10);
        }
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            LogitechGSDK.LogiStopSpringForce(0);
        }
        Text text = GetComponent<Text>();
        Inputs();
        
        
            shiftNumber += KeyShift();

        
        if ( KeyAccel()>= RoundValue(rec.lY))
        {
             Accel = keyAccel;
        }

        if(KeyBrake()>=RoundValue(rec.lRz))
        {
            Brake = keyBrake;
        }

        if ((KeySteer() >= 0) == (handleSteer >= 0))
        {
            if (Mathf.Abs(keySteer) >= Mathf.Abs(handleSteer)) 
            {
                Steer = keySteer;
            }
        }
        else
        {
            Steer = keySteer + handleSteer;
        }
        
        text.text = "Steer:" + Steer.ToString() + "\n" + "Accel:" + Accel.ToString() + "\n" + "Brake:" + Brake.ToString() + "\n" + "Clutch:" + Clutch.ToString() + "\n" + "ShiftNumber:" + ShiftNumber.ToString() + "\n" + "logicoolG29:" + logicoolG29.ToString();
        text.text += "\n" + "LogiUpdate:" + LogitechGSDK.LogiUpdate().ToString() + "\n" + "LogiIsConnected:" + LogitechGSDK.LogiIsConnected(0).ToString();
        /*デバッグログ--------------------------------------*/

    }
    int KeyShift()
    {
         if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.DownArrow))
        {
            if (Input.GetKeyDown(KeyCode.UpArrow) && (shiftNumber <TOP))
            {
                return 1;
            }
            else if (Input.GetKeyDown(KeyCode.DownArrow) && (0 < shiftNumber))
            {
                return -1;
            }
        }
        return 0;
    }
    float KeyAccel()
	{
		if (Input.GetKey(KeyCode.W))
		{
			keyAccel += SPEED;
		}
		else if (0 < keyAccel)
		{
			keyAccel -= SPEED;
		}
		if (-SPEED < keyAccel && keyAccel < SPEED)
		{
			keyAccel = 0;
		}
		if (keyAccel < 0)
		{
			keyAccel = 0;
		}
		else if (1 < keyAccel)
		{
			keyAccel = 1;
		}

        return keyAccel;
	}
    float KeyBrake()
    {
        if (Input.GetKey(KeyCode.S))
        {
            keyBrake += SPEED;
        }
        else if (0 < keyBrake)
        {
            keyBrake -= SPEED;
        }
        if (-SPEED < keyBrake && keyBrake < SPEED)
        {
            keyBrake = 0;
        }
        if (keyBrake < 0)
        {
            keyBrake = 0;
        }
        else if (1 < keyBrake)
        {
            keyBrake = 1;
        }

        return keyBrake;
    }
    float KeySteer()
	{
		if (Input.GetKey(KeyCode.D))
		{
			keySteer += SPEED;
		}
		if (Input.GetKey(KeyCode.A))
		{
			keySteer -= SPEED;
		}
		if ((!Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.D)) || (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.D)))
		{
			if (0 < keySteer)
			{
				keySteer -= SPEED;
			}
			else if (keySteer < 0)
			{
				keySteer += SPEED;
			}
		}
		if (-SPEED < keySteer && keySteer < SPEED)
			keySteer = 0;

		if (keySteer < -1)
		{
			keySteer = -1;
		}
		else if (1 < keySteer)
		{
			keySteer = 1;
		}

		return keySteer;
	}
    /*入力を変換し設定する関数----------------*/
    public void Inputs(/*Action shiftChange*/)
    {
        //if (LogitechGSDK.LogiUpdate() && LogitechGSDK.LogiIsConnected(0)/*ハンコン入っているかどうか*/)
        //{
            StringBuilder deviceName = new StringBuilder(256);//ハンコン名取得
            LogitechGSDK.LogiGetFriendlyProductName(0, deviceName, 256);

            if (deviceName.ToString() == "Logicool G29 Driving Force Racing Wheel USB")//ハンコン判定
            {
                logicoolG29 = true;
            }
            else
            {
                logicoolG29 = false;
            }

            rec = LogitechGSDK.LogiGetStateUnity(0);//ハンコン値
            Func<int, int, bool> PushJudge = (buttonX, buttonY) => { return ((rec.rgbButtons[buttonX] == PUSH) || (rec.rgbButtons[buttonY] == PUSH)) ? true : false; };//入力判定の関数

            Accel = RoundValue(rec.lY);//アクセル値
			if (logicoolG29)
			{
				if (BRAKE < RoundValue(rec.lRz))//ブレーキ値
				{
					Brake = 1.0f;
				}
				else
				{
					Brake = RoundValue(rec.lRz) / BRAKE;
				}
			}
			else
			{
				Brake = RoundValue(rec.lRz);
			}
           
            Clutch = RoundValue(rec.rglSlider[0]);//クラッチ値
			if (RANGE > Mathf.Abs(rec.lX))//ハンドル値
			{
				Steer =handleSteer= 0.0f;
			}
			else if(rec.lX>0)
			{
                Steer = handleSteer = ((float)rec.lX - RANGE) / ((float)Int16.MaxValue - RANGE);
			}
			else
			{
                Steer = handleSteer = -((float)rec.lX + RANGE) / ((float)Int16.MinValue + RANGE);
			}
          
            if (logicoolG29)//シフトレバー入力
            {
                for (int i = 1, j = LOW; j <= REVERSE; ++i, ++j)//G29のシフトレバー
                {
                    if (rec.rgbButtons[j] == PUSH)
                    {
                        if (i == 7) //Rがボタン18のため、7にあると6の次になっていまい、ゲームの仕様では1の前になる為、都合よくするため
                        {
                            i = 0;
                        }
                        shiftLever = i;
                        isShiftLever = true;
                        break;
                    }
                    else
                    {
                        isShiftLever = false;
                    }
                }
            }
            else
            {
                isShiftLever = PushJudge(UP, DOWN);//入力判定
            }
            /*
             1速->1
             2速->2
             3速->3
             4速->4
             5速->5
             6速->6
             R  ->7->0
             */

                isShiftPaddle  = PushJudge(RIGHT, LEFT);//入力判定
            
            /*
             R  ->0
             1速->1
             2速->2
             3速->3
             4速->4
             5速->5
             6速->6
             */

            if (!preIsShiftLever && isShiftLever)//レバー
            {
                if (logicoolG29)
                {
                    shiftNumber = shiftLever;
                }
                else
                {
                    if ((rec.rgbButtons[UP] == PUSH) && (shiftNumber < TOP))
                    {
                        shiftNumber += 1;
                    }
                    else if ((rec.rgbButtons[DOWN] == PUSH) && (0 < shiftNumber))
                    {
                        shiftNumber -= 1;
                    }
                }
            }
            else if (!preIsShiftPaddle && isShiftPaddle) //パドルシフト
            {
                if ((rec.rgbButtons[RIGHT] == PUSH) && (shiftNumber < TOP))
                {
                    shiftNumber += 1;
                }
                else if ((rec.rgbButtons[LEFT] == PUSH) && (0 < shiftNumber))
                {
                    shiftNumber -= 1;
                }
            }
			
            preIsShiftLever = isShiftLever;//前回更新
            preIsShiftPaddle = isShiftPaddle;
        }
}
***募集***
一緒にブログを運営してくれる人募集しています。
主な作業は修理作業です。画像足りなかったら拾ってくるとか、誤字の修正などです。
見出し増やすなど、見た目に関する所お願いします。
Twitterに連絡くれれば反応できます。

しんーーご (@shi_k_7) | Twitter