投稿

11月, 2019の投稿を表示しています

このブログについて

このブログについて

■ 公開中のゲーム ・ 16連打で18億年!? TapTapCats! 9,223,372,036,854,775,807回 タップして、別宇宙からの刺客を倒そう! あなたのタップの力が試される! 毎秒 16連打 を続けても、 約18.27億年 かかるので長生きしながら遊んでね! 記事 →  16連打で18億年!? TapTapCats! 購入 →  https://yamatogamelabs.booth.pm/items/5978628 ・ 攻略!ダークチョコモカチップフラペチーノ城! 一本道のローグライク ! モンスターを倒し、レベルアップしてアクションを獲得し、うまく使って下へと進んでいこう! HPや空腹の管理が勝利の鍵! たくさんのモンスターや謎のフロアを攻略し、ボスを倒そう! 記事 →  攻略!ダークチョコモカチップフラペチーノ城! 購入 →  https://yamatogamelabs.booth.pm/items/5698476 ・  Cuel UP! 無料で遊べるようになりました! ギリギリを攻めてジャンプ! 様々なオブジェクトを飛び乗り、かわし、上へ上へと進んでいこう! 記事 →  Cuel UP! 無料で遊べるようになりました! 購入 →  https://yamatogamelabs.booth.pm/items/5515664 ■ その他、規約など ・  ゲームのプレイ、ゲーム実況、二次創作などの規約 ・  プライバシーポリシー

「Unity」地面との当たり判定は、「ContactFilter2D」でいいんじゃない?

イメージ
「Unity」地面との当たり判定は、 「ContactFilter2D」派の大和局長です。 悩みがちな地面との判定です。 当たり判定用のオブジェクトを使ったりもしましたが、 予想外の挙動をして苦しんでたなー(  ̄- ̄)トオイメ ContactFilter2Dを使えばいいんじゃないかな? そして、いろいろ使ってみた結果、 私は「 ContactFilter2D 」にたどり着きました~ Unityは当たり判定とか用意してくれてるんだから、 用意しといてくれよ! …と、思ったらありました。 ふつーに存在してました。 気づかなかっただけでした。 これなら「Raycast」 を使わずに、 簡単に地面との判定をとれるみたい。 しかも、左右の壁や天井とは判定を取らないとのこと、便利! 左右に飛び跳ねるプログラムで使ってみた! 地面と接地しているときに、 マウスクリックで左右に動くプログラムで試しました! // 地面の判定を取るやつ [SerializeField] private ContactFilter2D filter2d = default; private Rigidbody2D rb2d; private float jumpPower = 300; // ジャンプ力 void Start() { rb2d = GetComponent <rigidbody2d>(); } void Update() { // ここで地面との判定を bool ground = rb2d.IsTouching(filter2d); // 着地していたら if (ground) { // 右クリックで右へ if (Input.GetMouseButtonDown(1)) { // 初期化する rb2d.velocity = new Vector3(); // ジャンプ rb2d.AddForce(new Vector3(0.5f, 1) * jumpPower); } // 左クリックで左へ if (Input.GetMouseButtonDown(0)) { // 初期化する rb2

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) を使い、マウスの位置を取得します これがややこしくて、 めっちゃめっちゃ時