質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1405閲覧

Unity MiniMapのアイコンをMiniMap範囲外を半透明にしたい

GrayMan

総合スコア5

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/06/08 23:11

編集2021/06/09 07:50

https://qiita.com/krlnmattun/items/77fb612f6290429fc023

Qiitaのこの記事を参照しながらMiniMapScriptを書いていたのですがこの記事のように動作してくれません
一部変更を加えた点は最初に出てくるMiniMap用のScriptがPlayerとなっており何か足りないのかエラーになってしまったのでGameObjectにしました

本当はMiniMapの外にあるアイコンがMapの端で半透明になって欲しいのですがPlayer自身のアイコンが半透明になってしまいます。
Iconを逆にしても上手くいきませんでした

Minimap

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5/// <summary> 6/// MiniMap用のScriptです 7/// </summary> 8public class MiniMap : MonoBehaviour { 9 [SerializeField] private GameObject gameObject; 10 11 void Update () { 12 var pos = gameObject.transform.position; 13 pos.y = transform.position.y; 14 transform.position = pos; 15 } 16}

MiniMapIcon

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[RequireComponent(typeof(SpriteRenderer))] 6public class MinimapIcon : MonoBehaviour { 7 [SerializeField] private Camera minimapCamera; // ミニマップ用カメラ 8 [SerializeField] private Transform iconTarget; // アイコンに対応するオブジェクト(建造物等) 9 [SerializeField] private float rangeRadiusOffset = 1.0f; // 表示範囲のオフセット 10 11 // 必要なコンポーネント 12 private SpriteRenderer spriteRenderer; 13 14 private float minimapRangeRadius; // ミニマップの表示範囲 15 private float defaultPosY; // アイコンのデフォルトY座標 16 const float normalAlpha = 1.0f; // 範囲内のアルファ値 17 const float outRangeAlpha = 0.5f; // 範囲外のアルファ値 18 19 private void Start () { 20 minimapRangeRadius = minimapCamera.orthographicSize; 21 spriteRenderer = gameObject.GetComponent<SpriteRenderer>(); 22 defaultPosY = transform.position.y; 23 } 24 25 private void Update () { 26 DispIcon(); 27 } 28 29 /// <summary> 30 /// アイコン表示を更新する 31 /// </summary> 32 private void DispIcon() { 33 // アイコンを表示する座標 34 var iconPos = new Vector3(iconTarget.position.x, defaultPosY, iconTarget.position.z); 35 36 // ミニマップ範囲内の場合はそのまま表示する 37 if (CheckInsideMap()) { 38 spriteRenderer.color = new Color(spriteRenderer.color.r, spriteRenderer.color.g, spriteRenderer.color.b, normalAlpha); 39 transform.position = iconPos; 40 return; 41 } 42 43 // マップ範囲外の場合、ミニマップ端までのベクトルを求めて半透明で表示する 44 spriteRenderer.color = new Color(spriteRenderer.color.r, spriteRenderer.color.g, spriteRenderer.color.b, outRangeAlpha); 45 var centerPos = new Vector3(minimapCamera.transform.position.x, defaultPosY, minimapCamera.transform.position.z); 46 var offset = iconPos - centerPos; 47 transform.position = centerPos + Vector3.ClampMagnitude(offset, minimapRangeRadius - rangeRadiusOffset); 48 } 49 50 /// <summary> 51 /// オブジェクトがミニマップ範囲内にあるか確認する 52 /// </summary> 53 /// <returns>ミニマップ範囲内の場合、trueを返す</returns> 54 private bool CheckInsideMap() { 55 var cameraPos = minimapCamera.transform.position; 56 var targetPos = iconTarget.position; 57 58 // 直線距離で判定するため、yは0扱いにする 59 cameraPos.y = targetPos.y = 0; 60 61 return Vector3.Distance(cameraPos, targetPos) <= minimapRangeRadius - rangeRadiusOffset; 62 } 63}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bongo

2021/06/09 20:17

「Player」がエラーになってしまったのは、おそらく正常な挙動だろうと思います。Qiitaの記事では言及がないようですが、おそらくPlayerは執筆者の方が独自に作成したプレイヤー制御用スクリプトなんでしょうね。 ご提示のコードのように修正なさったのは、「gameObject」という名称だとMonoBehaviourが元々持っている同名のプロパティと名前かぶりしてしまう点に要注意でしょうが、今回の不具合の直接的な原因ではなさそうに感じます。 記事に従って作成なさったのであれば、ヒエラルキー上のPlayerとObjectそれぞれに子オブジェクトとしてMinimapIconを配置なさっているかと思います。それらのインスペクター上の表示はどのようになっているでしょうか。スクリーンショットをご提示いただければ手がかりになるかもしれません。
GrayMan

2021/06/10 07:44

色々試していて原因がわかりました! 恐らく私の書いたキャラ移動のScriptに問題がありまして 多分この方が書いたのは見下ろし型のキャラの回転の考慮していないScriptを記述されていて 私が書いたのは三人称視点のScriptなのでキャラの回転を記述しているのが違いだと思います なのでキャラが反対方向に向くとMapも同じ方に反対方向を向く為Mapとしての機能を果たしてなかったんだと思います。なので見下ろし型のMiniMapのScriptを記述すれば解決すると思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問