投稿

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

プライバシーポリシー

プライバシーポリシー

公開中のゲームはこちら 【Cuel World】ほのぼのスローライフ! 見下ろし型の2Dサンドボックスゲーム! @ブログについて このブログでは、 *  Google AdSense を利用しています   - 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。   - Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「 広告 – ポリシーと規約 – Google 」をご覧ください。 *  Google アナリティクスを利用しています   -  このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。     このトラフィックデータは匿名で収集されており、個人を特定するものではありません。     この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。     この規約に関して、詳しくは ここをクリック してください。

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