code ソーシャル

Unityアプリcodetips(29)

スポンサーリンク

//tips

//UIボタンと地形のかぶり

地形とボタンのかぶりをplane distanceやorder in Layerで解決できなかったので、地形をボタンが表示に問題ないように変更。

同時に、どうしても地形とUIの表示が被ってしまう場合の対処法も考えておく。

CanvasのRender Modeを Screen Space-Cameraではなく、Screen Space – Overlay に戻し、画面に直接表示する形に変更する。

Overlayの場合、sceneでは異常な大きさでcanvasが表示されてしまうので、そこはgamesceneを見ながら確認する。

Unityでテキストを表示する方法

【Unity】uGUIをキャラクターの上に表示する手っ取り早い方法【RenderMode別】

ボタン移動に対しても障害物認識をさせたので下記に記載。

きちんとevent triggerでのpointer downでボタン設定を行う。image内のon clickではないことに注意。

間違えてon clickにするとボタンを押してもただカメラが切り替わるだけになる。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController7 : MonoBehaviour
{
[SerializeField]//インスペクターにpublicではない変数を表示させる属性

Vector3[] wallPoses = new Vector3[] {
new Vector3(0, 0, 3.0f),
new Vector3(0, 0, 6.0f),
new Vector3(8.0f, 0, 3.0f),
};

 

// Update is called once per frame

void Update()
{
Vector3 nextPosition = transform.position;//同じ処理はまとめたほうがコンパクト

if (Input.GetKeyDown(KeyCode.LeftArrow))
{
nextPosition.x = Mathf.Clamp(nextPosition.x - 1, 0, 10);
}

if (Input.GetKeyDown(KeyCode.RightArrow))
{
nextPosition.x = Mathf.Clamp(nextPosition.x + 1, 0, 10);
}

if (Input.GetKeyDown(KeyCode.UpArrow))
{
nextPosition.z = Mathf.Clamp(nextPosition.z + 1, 0, 10);
}

if (Input.GetKeyDown(KeyCode.DownArrow))
{
nextPosition.z = Mathf.Clamp(nextPosition.z - 1, 0, 10);
}

 

transform.LookAt(nextPosition);
bool hit = false;//障害物があるかどうかのフラグ

foreach (Vector3 v in wallPoses)
{
if (v == nextPosition)
{
hit = true;
break;
}
}

if (!hit)
{
transform.position = nextPosition;
}
}

public void PushLeftButton()
{
Vector3 nextPosition = transform.position;
nextPosition.x = Mathf.Clamp(nextPosition.x - 1, 0, 10.0f);
this.transform.LookAt(nextPosition);
//transform.position = nextPosition;
bool hit = false;//障害物があるかどうかのフラグ

foreach (Vector3 v in wallPoses)
{
if (v == nextPosition)
{
hit = true;
break;
}
}

if (!hit)
{
transform.position = nextPosition;
}
}
public void PushRightButton()
{
Vector3 nextPosition = transform.position;
nextPosition.x = Mathf.Clamp(nextPosition.x + 1, 0, 9.0f);
this.transform.LookAt(nextPosition);
//transform.position = nextPosition;
bool hit = false;//障害物があるかどうかのフラグ

foreach (Vector3 v in wallPoses)
{
if (v == nextPosition)
{
hit = true;
break;
}
}

if (!hit)
{
transform.position = nextPosition;
}

}
public void PushUpButton()
{
Vector3 nextPosition = transform.position;
nextPosition.z = Mathf.Clamp(nextPosition.z + 1, 0, 9.0f);
this.transform.LookAt(nextPosition);
//transform.position = nextPosition;
bool hit = false;//障害物があるかどうかのフラグ

foreach (Vector3 v in wallPoses)
{
if (v == nextPosition)
{
hit = true;
break;
}
}

if (!hit)
{
transform.position = nextPosition;
}
}
public void PushDownButton()
{
Vector3 nextPosition = transform.position;
nextPosition.z = Mathf.Clamp(nextPosition.z - 1, 0, 10.0f);
this.transform.LookAt(nextPosition);
//transform.position = nextPosition;
bool hit = false;//障害物があるかどうかのフラグ

foreach (Vector3 v in wallPoses)
{
if (v == nextPosition)
{
hit = true;
break;
}
}

if (!hit)
{
transform.position = nextPosition;
}
}
}

こちらのスクリプトでボタンの右のみがきちんと認識されないバグが生じたが、それはボタンのrotationのy値が入力されてたからで、z値に180を入力することで解決した。

あとはunityになぜか生成されるcom.unity.postprocessing@2.0.3-previewでのエラーはWindowにあるPackage Managerでupdateすることで修復可能。

I suggest to update the Post Processing instead of deleting it. To update just go to Window > Package Manager and switch the view from In Project to All. Select Postprocessing in the list. Then update it the latest version.

https://forum.unity.com/threads/postprocessmanager-error-with-editorscenemanager.673645/

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, ソーシャル
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.