17524


MobileSingleStickControlのjumpボタンでプレイヤーをジャンプさせたいのですがどう調べても有効なやり方が見つからなく、質問させていただきました。

宜しくお願い致します。

[jump.js]

[code]

    function Start () {
    
    }
    
    function Update () {
     var myAnimator=GetComponent(Animator);
     if (Input.GetKey(KeyCode.Space))
     {
      myAnimator.SetBool("Jump",true);
     }
    
     var state:AnimatorStateInfo=myAnimator.GetCurrentAnimatorStateInfo(0);
     if(state.IsName("Locomotion.Jump"))
      {
        myAnimator.SetBool("Jump",false);
      }
     }
    
[/code]

[ButtonHandler.cs]

[code]

    using System;
    using UnityEngine;
    
    namespace UnityStandardAssets.CrossPlatformInput
    {
        public class ButtonHandler : MonoBehaviour
        {
    
            public string Name;
    
            void OnEnable()
            {
    
            }
    
            public void SetDownState()
            {
                CrossPlatformInputManager.SetButtonDown("Jump");
            }
    
    
            public void SetUpState()
            {
                CrossPlatformInputManager.SetButtonUp("Jump");
            }
    
    
            public void SetAxisPositiveState()
            {
                CrossPlatformInputManager.SetAxisPositive(Name);
            }
    
    
            public void SetAxisNeutralState()
            {
                CrossPlatformInputManager.SetAxisZero(Name);
            }
    
    
            public void SetAxisNegativeState()
            {
                CrossPlatformInputManager.SetAxisNegative("jump");
            }
    
            public void Update()
            {
                if(CrossPlatformInputManager.GetButton ("Jump"))
                {
                    Debug.Log ("Input.getButtonDown jump");
                }
            }
        }
    }
    
[/code]

[追記]  
拙い質問にも丁寧に回答頂きありがとうございます。  
無事、ボタンを押したらジャンプすることが出来たのですが、「一度ボタンを押すと一回ジャンプする」という記述を当初の質問に書き忘れておりました。  
[jump.js]

[code]

    #pragma strict
    
    function Start () {
    
    }
    
    function Update () {
     var myAnimator=GetComponent(Animator);
     if (UnityStandardAssets.CrossPlatformInput.CrossPlatformInputManager.GetButton("Jump"))
     {
      myAnimator.SetBool("Jump",true);
     }
    
    
     var state:AnimatorStateInfo=myAnimator.GetCurrentAnimatorStateInfo(0);
     if(state.IsName("Locomotion.Jump"))
      {
        myAnimator.SetBool("Jump",false);
      }
    
     }
    
[/code]

の`GetCurrentAnimatorStateInfo(0)`でAnimatorの現在の状態を取得をして、変数stateに格納し、そのAnimatorの名前がLocomotion.Jumpなら、`SetBool`でJumpのパラメーターにfalseを指定して次ジャンプが押されるまでジャンプしないと思ったのですが  
なぜかボタンを押していなくてもジャンプをくりかえしてしまいます。  
この現象はAnimatorの取得がうまく行えていないのでしょうか？

うまく質問をまとめられず申し訳ないのですが、ご助力いただければと思います。


CC BY-SA 3.0
2015-10-10T16:25:12.333
17513
2015-10-12T02:47:19.697
2015-10-12T02:47:19.697
12383
12716
question
unity3d
Unityの仮想ボタンでジャンプしたいのですが


Standard AssetsのMobileSingleStickControlを使って入力制御を行うのでしたら、  
`jump.js`の`Input.GetKey()`の部分を`UnityStandardAssets.CrossPlatformInput.CrossPlatformInputManager.GetButton()`に差し替えることで動作します。  
ただし、`CrossPlatformInputManager.GetButton()`で渡す引数はKeyCodeではなくInputManagerに登録されている名前になるので気をつけてください。

[code]

    if (UnityStandardAssets.CrossPlatformInput.CrossPlatformInputManager.GetButton("Jump"))
    {
        myAnimator.SetBool("Jump",true);
    }
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/HxUqP.png)](https://i.stack.imgur.com/HxUqP.png)

Standard Assetsの`ButtonHandler.cs`を編集されているようですが、  
Name変数をエディター上で対応させたいInputManagerの名前にすれば動作するので  
`SetDownState()`、`SetUpState`、`SetAxisNegativeState`の引数は`Name`のままで大丈夫かと思います。  
ここに設定する名前が`CrossPlatformInputManager.GetButton()`の引数の名前と同じならばボタンを押した際の挙動が取得できます。

[![画像の説明をここに入力](https://i.stack.imgur.com/Xk8G5.png)](https://i.stack.imgur.com/Xk8G5.png)

MobileSingleStickControlを使う際に一番気をつけねばならない点は、MOBILE_INPUTが有効でなければボタンが表示されない点です。  
CrossPlatformInputパッケージをインポートすると上記に[Mobile Input]のメニューが追加されます。  
メニューの中のEnable、Disableで入力方式を切り替えれます。  
この際、BuildSettingがStandaloneなどMobile向けではない場合は、Enableにしてもボタンは表示されないので気をつけてください。  
[![画像の説明をここに入力](https://i.stack.imgur.com/9ERQK.png)](https://i.stack.imgur.com/9ERQK.png)

# [追記]「一度ボタンを押すと一回ジャンプする」質問について

現在使っている`CrossPlatformInputManager.GetButton()`、以前使っていた`Input.GetKey()`の関数はボタンが押し続けている間true返る関数です。

ボタンを押した瞬間のみtrueの返る関数がありますのでそちらを使用してみてください。  
他にもボタンを離した瞬間のみを取得する関数もあります。以下にまとめます。

・ボタンが押された瞬間を取得する関数  
`CrossPlatformInputManager.GetButtonDown()`  
`Input.GetKeyDown()`  
・ボタンが離された瞬間を取得する関数  
`CrossPlatformInputManager.GetButtonUp()`  
`Input.GetKeyUp()`  
・ボタンが押されているかを取得する関数  
`CrossPlatformInputManager.GetButton()`  
`Input.GetKey()`

[code]

    if (UnityStandardAssets.CrossPlatformInput.CrossPlatformInputManager.GetButtonDown("Jump"))
    {
        myAnimator.SetBool("Jump",true);
    }
    
[/code]

参考いただければと思います。


CC BY-SA 3.0
2015-10-11T02:48:55.817
17524
2015-10-11T23:19:14.193
2015-10-11T23:19:14.193
12383
12383
17513
answer