投稿

ラベル(プログラム)が付いた投稿を表示しています

おすすめ!自作ゲーム!

【バイサバ!】溜めて、狙って、ぶっ飛ばせ!チャージで全て薙ぎ払うタワーディフェンス!

イメージ
バイサバをBOOTHでも販売開始しました! サーマーセールも合わせて開催! 今なら 50%OFF! の 500円で購入可能 に! ダウンロードは →  https://yamatogamelabs.booth.pm/items/8407425   DLsiteで販売しています。(Bloggerの規約上、リンクは貼れません。 Bye!Bye!Survivor!  もしくは  RJ01621439  で検索してください) デモ版もあるのでまずはお試しから! ■ ゲーム概要 溜めて、狙って、ぶっ飛ばせ! 右クリック長押しでチャージ! 溜めるほど、攻撃がどんどんパワーアップ! 攻撃力・攻撃サイズ・Hit数・クリティカルまで強化される、強力なチャージ攻撃で、押し寄せるスライムをまとめて吹き飛ばそう! 敵をピンポイントで狙い撃つか、 最大までチャージして敵の群れを一気に薙ぎ払うか。 シンプルな操作で、チャージのタイミングと狙いが勝敗を分ける! チャージ攻撃で敵をまとめて撃破! ■ このゲームの魅力 シンプルな操作で、チャージのタイミングと狙いが勝敗を分ける! チャージ攻撃で敵をまとめて撃破! 基本操作は左右移動だけ。 攻撃は自動で行われるので、難しい操作は必要ありません。 そこに加わるのが、強力なチャージ攻撃。 チャージするほど攻撃が強くなり、 大きさやHit数も増加! 大量の敵をまとめて貫通させたり、 強力な一撃で狙った敵を撃ち抜いたり。 いつ撃つか、どこを狙うかはあなた次第! ■ クリスタルを守り抜け! スライムたちは、あなたではなくクリスタルを狙って押し寄せてきます。 敵がクリスタルに到達するとダメージを受け、 HPが0になるとクリスタルが大爆発! そのまま空の彼方へ吹き飛ばされてゲームオーバー! 攻撃だけでなく、クリスタルのHP管理も重要です。 ボスを倒してステージを突破! ステージの最後には強力なボスが登場。 大量のHPを持ち、強力な攻撃を繰り出してきます。 さらに、ボスがクリスタルに到達すると即ゲームオーバー! 敵の攻撃は、こちらの攻撃で相殺することも可能。 迫りくる敵と弾をまとめて薙ぎ払い、 ボスがクリスタルへ到達する前に撃破しよう! ■ オブ...

【Unity】地面の傾斜に合わせてキャラを地面と平行にする

イメージ
 Unityで傾斜に合わせてキャラの向きを変えたかったので   傾斜が大きすぎると違和感がやばいので、ほどほどに   // 子オブジェクトを取得しておく public GameObject child;  // 回転の速度 private float rotSpeed = 0.01f;   void Update() {      RaycastHit hit;      if (Physics.Raycast(transform.position, Vector3.down, out hit))      {          // 地面のオブジェクト           if (hit.collider.CompareTag("Ground"))           {                Quaternion rot = Quaternion.FromToRotation(Vector3.up, hit.normal);               // 子の向きを変えたいので                child.transform.rotation = Quaternion.Lerp(child.transform.rotation, rot, Time.time * rotSpeed);           }      } } リープを使ってゆっくり変更しています ちなみに、ヒエラルキーはこんな感じ↓     ↑ 回転させるオブジェクト、プログラム、キ...

Unityで子のオブジェクトをすべてListに放り込むプログラム

Unityで子のゲームオブジェクトをすべてListに放り込むプログラム   private List<GameObject> list = new List<GameObject>(); void Start(){      // 自分の子をすべて取得 --- すべてをリストに入れる      foreach (Transform child in transform)      {          list.Add(child.gameObject);      } }  ステージを一纏めにしているから、最初に取得するためによく使うプログラム  

【Unity】バンパーを作ってみた

イメージ
先日公開したゲーム、かぷにんですが、 頑張ってスマホでも遊べるように、 ボタンを追加したんです、、、 …が、 Unityでブラウザ用にビルド すると、 スマホでは遊べない ことに気づきました! ボタンの設定とかがんばったのに… まあ、いいや。 今回は、 バンパー を作ったことをまとめます。 ピンボールでよく見るやつを想定して ピンボールを見て思いつき、 ギミックの一つとして組み込みました。 シンプルに、キャラがぶつかると跳ね返るというもの。 意外と簡単で、 プレイヤーの位置とバンパーの位置を引けばOK! 数値が大きくなりすぎることもあるので、 normalized を使って正規化しました。 ちなみにこの時に、正規化という言葉を覚えました👍 →  正規化(wiki) ソースはこちら /// <summary> /// アイテムやモンスターとの判定 /// </summary> private void OnTriggerEnter2D(Collider2D other) { // バンパーの判定 if (other.gameObject.CompareTag("Bumper")) { rd2d.velocity = new Vector2(); rd2d.gravityScale = 1; // 演出 Vector3 bumper = (transform.position - other.gameObject.transform.position).normalized; rd2d.AddForce(new Vector2(bumper.x * 400, bumper.y * 200)); bumWait = 0.5f; // エフェクト } } エフェクトや、演出、 キャラのアニメの切り替え、SEなどは省略しました。 まとめ 悩むことも、必要もない!と思えるほどに簡単でした。 でも、初心者には難しい…😒 頭の中の映像とプログラムを結びつけるのが無理だったり。 なんとかなったから、まあ、いいや。 公開中のゲーム、「かぷにん...

【Unity】ボタンを押したとき、マウスクリックをなかったことに!

イメージ
よく、マウスクリックで操作するゲームを作ることが多いです。 クリックでキャラを移動させて、さまざまなギミックを回避していく! のは、いいんですが…問題も出てきます。 オプション画面を表示するときなど、 ボタンをタップしたいときがあります。  もしくは、スマホ用のボタンを設置した場合なども。 でもこの時、 ボタンを押してしまう と、 マウスクリックも反応 して、キャラが変な動きをしてしまいます。 マウスとボタンを押したときで文字を変更するプログラムです↓ マウスクリックが見えませんが、 なんとなく伝わるはず(;^_^A 右のボタンを押しても、 マウスで押すと左クリックになるので、 おかしな挙動をしています。 解決方法は、意外と簡単! if (EventSystem.current.IsPointerOverGameObject()) return; で、あっさり解決しました~ ボタンなどのUIの上をクリックしても無視してくれるみたいです👍 これが欲しかった! using UnityEngine.EventSystems; が、必要なので、プログラムの上の方に書いておきましょう。 ↓みないな感じで行けます using UnityEngine.EventSystems; public class MouseUiInput : MonoBehaviour {         void Update()         {                 // UIをクリックしているとき、ここで戻す                 if (EventSystem.current.IsPointerOverGameObject()) return;   ...

Unityで子オブジェクトをすべて取得したり、1つだったり

イメージ
どうもどうも、 初心者ゲーム制作者の大和です 自分がゲーム制作の過程で 解決できたことを書いていきます 今回は悩みの種だったオブジェクトの取得について とくに、 子オブジェクトの取得 です Unityで子オブジェクトをすべて取得したり、1つだったり 自分の認識では、「foreach」ですべてを! transform.GetChild(子の番号)で一つを! な、感じです 実際に使っているのは↓ 状況に応じでいいとこどりすればいけるだろっ! using System.Collections; using System.Collections.Generic; using UnityEngine; public class ChildGet : MonoBehaviour { // ステージを取得する [SerializeField] private List<GameObject> stageList = new List<GameObject>(); void Start() { // 親オブジェクト Transform parentTransform = GameObject.Find("Stage").transform; // 0番目の子を取得 --- 直接 print(parentTransform.GetChild(0).name); print("---------------------------------------------------"); // 子をすべて取得 --- すべてをリストに入れる foreach (Transform child in parentTransform) { stageList.Add(child.gameObject); print(child.name); } print("---------------------------------------------------"); // 現在のステージの番号 int nowStageNum = 1; // リストの...

Unityでクリックした位置に移動するプログラム

イメージ
おどろき、おののき、マジ泣き、めがみちゃん! でも使った Unityでマウスをクリックした位置にキャラクターを動かすプログラムです ゲーム制作でよく使いそうなので、まとめておきました あまり難しく考えず、 → マウスクリックの位置を取得 → 動け! というプログラムにしました ↓以下がソースとなります using System.Collections; using System.Collections.Generic; using UnityEngine; public class player : MonoBehaviour { private Vector3 setTapPos; private float speed = 7; void Update() { // 移動する Move(); } // タップした位置に移動する private void Move() { // ボタンを押したとき if (Input.GetMouseButtonDown(0)) { setTapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); } // ボタンを押しているとき if (Input.GetMouseButton(0)) { setTapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); setTapPos.z = 10;// カメラとプレイヤーの距離 // Lerpで動かす transform.position = Vector3.Lerp(transform.position, setTapPos, speed * Time.deltaTime); } } } スクリーン座標をワールド座標へ変換 マウスクリックした位置はスクリーンの座標ですが、 キャラの操作はワールド座標で動かさなければならいので Camera.main.ScreenToWorldPoint(Input.mousePosition) を使い、マウスの位置を取得します これがややこしくて、 めっちゃめっちゃ時...

Unityで距離に応じてサイズを変更する

イメージ
こちらのゲーム で迫りくるモンスターの表現として 中心から遠ざかるとサイズを大きくする、ということをやってみました ↑モンスターやキャラクターが 中心に近いと小さく なり、 遠い位置なら大きく 表示するプログラムです using System.Collections.Generic; using UnityEngine; // 自分で作ったもの namespace MyWorks { public class DistanceScale : MonoBehaviour { // 2つのオブジェクトの距離からサイズを返す // <param name="target" />ターゲットの位置 // <param name="myPos" />自分の位置 public static Vector3 DScalse(Vector3 target, Vector3 myPos) { // z軸は0にしておく target.z = 0; myPos.z = 0; // 距離に応じてサイズを変更する float distance = Vector3.Distance(target, myPos); Vector3 setScale = new Vector3(1, 1, 1) * distance / 2; // 最大最小 if (setScale.x < 1f) setScale.x = 1f; if (setScale.y < 1f) setScale.y = 1f; if (setScale.x > 7) setScale.x = 7; if (setScale.y > 7) setScale.y = 7; setScale.z = 1; return setScale; } } } やっていることはシンプルです Vector3.Distanceで ターゲット と 自分の距離 を測って それをスケールに放り込んでいます 使い方は↓のように namespaceを使っています using MyWorks; // 自分が必...