//tips
//UIボタンと地形のかぶり
地形とボタンのかぶりをplane distanceやorder in Layerで解決できなかったので、地形をボタンが表示に問題ないように変更。
同時に、どうしても地形とUIの表示が被ってしまう場合の対処法も考えておく。
CanvasのRender Modeを Screen Space-Cameraではなく、Screen Space – Overlay に戻し、画面に直接表示する形に変更する。
Overlayの場合、sceneでは異常な大きさでcanvasが表示されてしまうので、そこはgamesceneを見ながら確認する。
ボタン移動に対しても障害物認識をさせたので下記に記載。
きちんと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/