相談内容
Unityを使ってゲーム制作の練習をしています。
「八幡平スパルタキャンプUnity」の動画や参考書「楽しく学ぶUNITY2D超入門講座」を参考にUnityちゃんを歩かせる2Dゲームを作っているのですが、途中で行き詰まってしまったので助けてもらえないでしょうか?
行き詰まった場所
スマホ用の画面上にcanvasで
「←」
「→」
「ジャンプ」
このボタンを表示させ、プッシュした入力を反映させてUnityちゃんを歩かせたりジャンプをさせたいのですが、ボタンの入力の受け渡しの方法の説明がなくて、何をして良いのかわからなくなってしまいました。
ボタン側のゲームオブジェクトで何をして、ゲームキャラ(プレイヤーコントローラ)のゲームオブジェクトのほうで何をしたらよいかを教えて貰えると助かります。
できていること
キー入力による移動とジャンプ
ボタンの表示
ボタンを押した際のデバッグ表示
移動一つにしても、translateで位置を変えていったり、加速度を加える方法もあるので出来ているコードを
提示頂くと回答がつきやすいと思います。
ありがとうございます。
ボタン側のスクリプトはこんな感じです。AddForceで動かそうとしてます。
EventTriggerを設定した後、その後移動させるために何をしたらよいのかがわからなくて止まっています・・・
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PushLeftButton : MonoBehaviour
{
GameObject UnityChan2D;
// ボタンが押された場合、今回呼び出される関数
public void oshita()
{
Debug.Log("左押したよ");
}
}
ありがとうございます。
rigidbody2D.AddForceで、おそらく移動させる本体のほうのスクリプトの書くんですよね。
「ボタンを押している間力が加わる」を書けば良いと考えているのですが、肝心のその力の渡し方がわかってなくて・・・
おそらく基本的な事ゆえ、参考書にも載ってない上に、どのHPでも詳しくかかれていなく、或いはボタンのスクリプトに直接動かすコードを書いている手法しか掲載がなくて、行き詰まっています。
何となくわかっていること
・ボタン側の「押している」情報をEventTriggerを使って渡す
・キャラ(Unityちゃん)本体を動かすには、多分ボタンの押した判定をUnityちゃん側から見る必要がある
捕捉追記
押した判定は単体では動いていることをデバッグログで確認していて、その
「押している」
という情報をメインスクリプト側から見る手法がわかってない状態です。
また、そもそもその文法で良いのか、その逆で
「ボタン側」から
「Unityちゃん側」
を何か呼び出す形なのかすら素人過ぎて判断できてない為、おそらく慣れた人にとっては当たり前のような部分を伺っているかと思います
ボタンのスクリプトからUnityちゃんを取得する方法を調べてみて下さい。
https://miyagame.net/objget/
ありがとうございます。
ボタン側のスクリプトでUnityちゃんで取得するのですね。
float x = Input.GetAxis("Horizontal");
Move(x, jump);
サンプルコードのキー操作ではUnityちゃん本体のスクリプトの中で上記のような形で動かしているようだったので、逆をやろうとしてました・・・
inputX * moveSpeed
こちら、inputX 、moveSpeedをともに各ボタンのスクリプト上で宣言する必要があるという感じでしょうか?(おそらく、コントローラーのマネージャーみたいなものを用意すれば必要がない?という認識です)
inputXは左右の入力だと思うのですが、左ボタンに-1、右ボタンに1をいてれいます。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PushLeftButton : MonoBehaviour
{
public GameObject UC2D;
private Rigidbody2D rb2D;
private float moveSpeed = 10f; // スピード
private float inputX = -1f; // 左へいく
void Awake()
{
rb2D = UC2D.AddComponent<Rigidbody2D>();
}
// ボタンが押された場合、今回呼び出される関数
public void oshita()
{
Debug.Log("左押したよ ボタン側");
rb2D.AddForce(new Vector2(0, inputX * moveSpeed));
}
}
こんな形で入れてみたのですが、「左」のアイコンを押した瞬間にエラーが出てしまいました。
回答1件
あなたの回答
tips
プレビュー