投稿

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

おすすめ!自作ゲーム!

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

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

【Unity】AddForceを使った予測軌道【ピペット制作記録3】

イメージ
作成中のゲーム「ぴぺっと」では ジャンプするときの軌道が大事になります。 これを直観のみで行うと、 何度もミスして嫌気がさします(体験談) ジャンプの弾道を予測軌道を表示したかった! もう最初から軌跡を表示しよう! なので、 軌跡を先に表示し、 タイミングを見計らって、 ジャンプ! という仕様にしました。 ※ 目標画像 次の土管に狙いを定めとジャンプします。 ※ 実際の画像 かなりいい感じにできましたー(/・ω・)/ // 疑似コード 「鉛直投げ上げの公式」を使えばOK! これです↓ y = v 0 t − 1 2 g t 2 …いえ、ぶっちゃけよくわからなかったので、 サイト巡りをしたら見つけました。 →  【Unity勇者の奮闘記】Unityで物理の勉強3(弾道予測線を作成する) まさにこれでOKでした。 こういうプログラムを思いつかないのが、 初心者にはつらい( ;∀;) // 実際のプログラム 私の場合は2Dにしたかったので、 Rigidbody2Dに変更しました。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class DrawLine : MonoBehaviour { // 弾道を表示するための点のプレハブ [SerializeField] private GameObject dummyObjPref = default; // 弾道を表示する点の親オブジェクト [SerializeField] private Transform dummyObjParent = default; // 初速のベクトル [SerializeField] private Vector3 v0 = default; // 弾道予測の点の数 [SerializeField] private int dummyCount = 10; // 弾道を表示する間隔の秒数 [SerializeField] private float secInterval = 0.2f; ...

【Unity】Addforce2Dでジャンプアクション!【ぴぺっと制作記録2】

イメージ
キャラクターの基本動作とUIを作成しています。 今回の作業の内容は以下の通りです。  キャラクターを飛ばす  キャラクターのジャンプ力を調整できるように  キャラクターのパワーUIを表示 ジャンプして進んでいくゲームなので、必須の項目。 さらに、ジャンプ力を調整する仕様。 それをUIで分かりやすく表示することを考えています。 // 頭の中のイメージ こんな感じに // 実際に動かしてみたとき ジャンプしたらUIを非表示にするのを忘れてました(;^_^A 後で追加しておきます。 でも、キャラの右側にUIを表示するのもできています。 もちろん、ゲージの量に応じてジャンプ力は変わります。 // 疑似コード プログラムで書くときにできるだけ、 頭の中のイメージを文字でまとめておきます。 キャラを飛ばすプログラム マウスをクリック キャラに力を加えて移動させる ↑の時に重力を忘れずに 飛んでいく ジャンプ力の調整 変数を作って、 Mathf.PingPongを使えばOK ジャンプ力のゲージUI ゲージの画像を取得 fillAmountに値を入れる ゲージの位置をプレイヤーの横に プレイヤーの位置を取得 ワールド座標をスクリーン座標に変換 ゲージオブジェクトに位置を設定 // 実際のプログラム プログラムはこちらになります。 プレイヤーのプログラムとUIの2つがあります。 プレイヤーのプログラム using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { private UI ui = default; private Rigidbody2D rigidbody2d = default; // これがないと private float jumpPower = 1; // ジャンプのパワー private float power = 10; // 全体のパワー private float u...

【Unity】タイマー作り【ぴぺっと制作記録1】

イメージ
まずは簡単なところから作ろう! ということで、タイマーを設置します。   このゲームは時間内にクリアすることが目的です。 そこまで時間に追われる感は出さず、 じっくり考えてクリアできるようにしたい。 なので、制限時間は長め。 とりあえず、99秒以内にクリアすることを目的にします。 作ってみたタイマー  「Time.deltaTime」を使います。   最後のフレームからの経過時間[ms]が格納されています。 つまり前回のUpdate()からの経過時間がとれます。 というもので、Unityではよく使うものだと思います。 完成するとこんな感じに↓ 流れはこんな感じに 頭の中の映像をまずは文字にしてみます。 経過時間用の変数を作り 表示するタイマー用の変数を作り void Update() の中で変数にTime.deltaTimeの値を加える もしも、1より大きくなったら タイマーを1減らして 経過時間用の変数を初期化! で、問題ないんじゃないかなと。 実際のプログラムはこんな感じに 書いてみたプログラムはこうなりました↓ using System.Collections; using System.Collections.Generic; using UnityEngine; public class GM : MonoBehaviour { private UI ui = default; // UIを更新するために private float timeCount = 0; // 経過時間用 private int time = 99; // 表示する時間 // Start is called before the first frame update void Start() { // 取得しておく ui = GetComponent<UI>(); } // Update is called once per frame void Update() { // --- UIの更新 ----- // タイマーの更新 ui.Timer(time); // -...

ゲームのコンセプトを自分なりにまとめてみました

イメージ
自作ゲームの企画をなんとかまとめ、いざ開発! と、なっていははずが、ブレるブレる、ブレまくり。 なんとなくでしかとらえていなかった、 コンセプトが曖昧だったからではないかという結論に達しました。 なので、コンセプトを明確にし、 今度こそブレずにゲームの製作をば! コンセプトとは? いろいろなHPを見てみると、 ・ ユーザーに対してどういう体験(経験)を与えたいか ・ ターゲットユーザーと体験の内容 といった記事がちらほら。 つまり、コンセプトとは、 ・ とにかく、ユーザー視点 ・ 何を得られるのか?(体験、経験) という、独自の解釈で考えてみることにしました。 とりあえず、考えてみた。 考えてみた …が、 それっぽいですが、 ただの紹介文ができあがりました。↓ まんまるねこが飛び出て転がる! かわいらしさと爽快さを兼ねそろえたジャンプ&転がりアクションゲーム これはゲームを公開するときにでも使うとして。。。 映像を言葉にするのは難しい うまくまとめられなかったので、 箇条書きで書いてみました。 コンセプト 体験、得られるもの  かわいらしいキャラの豊かな表情で癒し  ピタッと収まる快感  タップでジャンプの軽快さ  さまざまギミックを解いていく快感 これならわかりやすい? 悩みすぎると無限ループに入りそうなので、今はこのままで。 ターゲット: かわいらしいキャラを操作するので、 子供や女性? 男性でもこういうのが好きな人。 年齢的には若いはず。 ジャンル: ワンタップで遊べる謎解きアクションゲーム 主人公 名前は「ぴぺっと」 土管が大好きで土管に住み着いた猫。 「ぴぺ」は土管を英語で「Pipe」から。 「っと」は猫を英語で「Cat」なので。 ボス 名前は「まるやん」 いたずら好きなキャラ。プレイヤーを邪魔するのが大好き! 「まるいやんきー」から。 なんで飛ぶの? まんまるのキャラで、土管にぴったりと収まり、 出るには勢いよく飛び出る必要があるから。 なんで収まるの? 猫は狭いところが好きで、収まっているイメージがあるから(個人談)。 なん...

【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などは省略しました。 まとめ 悩むことも、必要もない!と思えるほどに簡単でした。 でも、初心者には難しい…😒 頭の中の映像とプログラムを結びつけるのが無理だったり。 なんとかなったから、まあ、いいや。 公開中のゲーム、「かぷにん...

プログラムの表示を「SyntaxHighlighter」にしてみました

イメージ
今までこのブログでソースコードの表示には、 google code prettify を使っていたんですが、 なんだか見づらい気がしたので、思い切って変更! SyntaxHighlighter に変更しました! 表示はこんな感じに↓ 昨日の記事のソースです → 「 【Unity】ボタンを押したとき、マウスクリックをなかったことに! 」 かなり見やすくなったと思います。 少しテンションが上がって やる気が出てきました(〃▽〃)ポッ 参考にしたサイト

【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;   ...

自作ゲーム「かぷにん!」を公開しました!

イメージ
ようやくゲームが完成したので、 unityroomさんでゲームを公開しました! タイトルは「 かぷにん! 」 ブラウザで遊ぶことができます。 マウスやボタンだけで操作が可能なので、 暇つぶしに最適です👍 プレイはこちら↓ 下のリンクからどうぞ ↓ タイトル シンプルなタイトル画面です。 かぷにん は、忍者風のキャラクターなので、 巻物やクナイなど、和風テイストとなっています。 タイトル画面は動きを少なくし、 かなりシンプルに。 スタートボタンだけがぽよんぽよんして、 ここを押せと主張してきます。 歯車ボタン はオプション画面へと移動し、 BGM , SE の調整やクレジットが表示されます。   遊び方 ゲーム開始前に、 遊び方 の説明が表示されます。 スワイプすることで情報を見ることができます。 アイテムやボスの詳細もあるので、 確認していただければ、攻略の手助けになることも? ゲーム中 操作はシンプル!でも、 奥が深い ゲームです。 右へ左へ移動し、 モンスターや障害物を回避して進みます。 動くモンスターやギミックもたくさん用意しました。 私もよく引っ掛かります。 アイテムや巻物は定期的に出現します。 スコア稼ぎはもちろん、 ゲームを有利に進めることができるので、 どんどん狙って獲得していきましょう! ボス戦 ボス、 まるやん の登場です! 多彩な攻撃を繰り出し、 プレイヤーの邪魔をしてきます。 でも、意外とパターンは少ないので、 回避するのは落ち着いていればOK! それよりも、通常のモンスターに注意! 私もそっちでやられます。 攻撃チャンス は 近づいてきたとき です! 強くはないので、一撃で倒せます👍 リザルト画面  プレイヤーがモンスターや、 障害物に当たるとゲーム終了です! 獲得したスコアによって、 あなたの評価が決まります。 スコアが低いと煽られることもあるので、 なるべく多くのスコアを稼ごう! 私も、こいつ(←)しか見た記憶がありません! ...

「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...

デバッグだ!デバッグしよう!……バグが増えたぞ!

イメージ
もうゲームが完成するし、 調子に乗ってゆっくりコーヒーでもたしなみながら、 デバッグしようかなと思っていた、 ゲーム制作初心者の大和です。 まあ、問題はどんどん増えていくわけで…( ;∀;)  ゲーム制作あるあるかもしれませんが、 ・ デバッグを始めるとバグが増える ・ このゲーム面白いか?と悩む …こんな状況です。 昨日もブログを更新した後に 余裕の表情でデバッグを開始(^^ ♪ すると出るわ出るわ!雨あられ! バグの大雨 が発生したんですよ。 バランスもおかしく、 これってクリアできないんじゃね? と、思う…どころか、 マジで 物理的にクリアすることができない ところも多々。 デバッグはしっかり、時間をかけて! 自分の未熟さがもろに出てくるので、 デバッグは嫌い !だったんですが、 やっぱり時間をかけてしっかりやるべきですね。 今までは、デバッグの時間を1日もかけずに さっさと公開していたんですが、 今回はちょっと頑張って時間をかけます。 簡単なゲームだからこそ、 楽しんでもらえるように。 無料のゲームだと、少しでも気に入らないところがあると、 ユーザーから見放されるので(私もめんどくなるとそのゲームをやめるし) さあ、地獄の始まりだ! 無限デバッグのループ から抜け出せるのか! こうご期待! ーー次回、 大和局長 、 死す!   お楽しみにね!

公開前の静けさ?完成に近づくと何をしていいかわからなくなる

イメージ
もうそろそろゲームが完成しそうな 初心者ゲーム制作者の大和です。 ゲームが完成に近づくと、 何をしていいかわからない病 にかかります。 ここからがめっちゃ苦労します。 というか、ここからがつらいイメージがあります(;^_^A 制作中のゲームは「かぷにん!」 今、作っているゲームのタイトルは「 かぷにん! 」 上の画像のキャラです。 カプセル&天使の「かぷじぇる」シリーズのキャラクターである、 忍者のキャラクター「かぷにん」のゲームです! シナリオはこんな感じ いたずらっ子の「 まるやん 」に、大事な巻物が盗まれてしまいました! 追いかけるかぷにんの前には、 モンスターたちが立ちはだかる! 画面の両側を行き来して、モンスターを避け、 巻物を集めよう! そして、出たなまるやん! 諸悪の根源の まるやん 出現! 笑顔で攻撃を繰り出してくるので、うまく回避しよう! 調子に乗りやすい、あほの子なんです まるやんは調子に乗って、不用意に近づいてくるよ! タイミングを見計らって突撃! かぷにんは強いので一発で倒せます! …と、こういう状況で、現在はデバッグ中です さらに要素を追加して面白くしたいんですが、 バランスが崩壊しそうなので、自分の追加したい欲を抑えています👍 近日中に公開予定です!

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で向いている方向に弾丸を飛ばす(2D)

イメージ
向いている方向に移動させたい! そう思うことがゲーム制作でてくるので、 まとめておきました 飛ばすのはこいつ、実は弾丸 うちのゲームでよく使うこいつ こいつは弾丸役のモンスターとなっています 弾丸なので飛ばさなければいけないんですが、 これが初心者の私には難しいものでした ↑こんな感じに 自分の向きベクトルを取得 解決方法は、 自分の向きベクトルを取得 すればいいとのこと ↓の記事をみると一発で解決しました! こんな感じで使ったよー 向きの指定は生成する方で決まっているので、 Rigidbody2DにAddForceで飛ばしました 弾丸のスクリプト using System.Collections; using System.Collections.Generic; using UnityEngine; using MyWorks; // 自分用のまとめ // 弾丸の移動 public class Bullet : MonoBehaviour { private Rigidbody2D rd2D = default; // Start is called before the first frame update void Start() { rd2D = GetComponent<rigidbody2d>(); Vector3 dir = Rotation.AngleDir(transform); rd2D.AddForce(dir * 200); } void OnBecameVisible() { // 表示されるようになった時の処理 } void OnBecameInvisible() { // 表示されなくなった時の処理 Destroy(gameObject); } } using MyWorks;は、 自分がよく使うプログラムをまとめています↓ using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; namespace MyWorks { ...

Unityで獲得したスコアを表示

イメージ
モンスターを倒したり、アイテムを入手した時にスコアを獲得! そのスコアを表示したいなと思ったので、作ったプログラムです ゲームの演出として、獲得したスコアを表示したかった! こちらのゲームで実際に使用したプログラムです 少し見づらいかもですが、こんな感じです 倒したモンスターの位置に「+10」などの スコアを表示ています こんな感じに using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; // UIの更新 public class ui : MonoBehaviour { // 表示するエフェクト [SerializeField] private GameObject scoreEffect = default; // 獲得したスコアの表示 // エフェクトを生成するオブジェクトの位置 // 表示するスコア public void ScoreEffect(GameObject obj, int num) { GameObject canvas = GameObject.Find("Canvas"); // 生成 GameObject eff = (GameObject)Instantiate (scoreEffect); // 親オブジェクトを設定するとき、UIの場合はこっちじゃないと eff.transform.SetParent(canvas.transform, false); // 位置をスクリーン座標に eff.GetComponent<recttransform>().position = RectTransformUtility.WorldToScreenPoint(Camera.main, obj.transform.position + new Vector3(0, 0.5f)); // 獲得したスコア Text scoreText = eff.GetComponent<text>(); sc...

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; // 自分が必...