今回はTips的なエントリーです。コリジョンに触れたら、全然別のところにあるオブジェクトを反応させたい場面があると思います。例えば、スイッチを踏んだら扉が開く、みたいな仕掛けです。別のオブジェクトのフラグを読み込むことで実現できます。
KuroMikanの環境
・Mac OS 10.15.5(たまにWindows10 Home)
・Unity 2019.4.8f1
完成目標
緑色のボールを中央にあるコリジョンに接触させると、その上にある黒い壁が左に動く
という仕組みの実装を目指します。
実装方法
1) コリジョン側のコード
using UnityEngine;
public class SwitchCollision : MonoBehaviour
{
bool isSwitchOn; // 判定フラグ
// フラグの状態を返す
public bool IsSwitchOn()
{
return isSwitchOn;
}
// コリジョンに触れたら
void OnTriggerEnter(Collider other)
{
isSwitchOn = true;
}
}
SwitchCollision.cs をコリジョンにアタッチします。
コリジョンに触れたら判定フラグをONにするというスクリプトです。
2) 動く壁側のコード
using UnityEngine;
public class SwitchDoor : MonoBehaviour
{
[SerializeField] GameObject switchCollision;
void FixedUpdate()
{
if(switchCollition.GetComponent().IsSwitchOn())
{
transform.Translate(-0.05f, 0f, 0f);
}
}
}
SwitchDoor.cs を動く壁にアタッチします。
動く壁のInspector上でswitchCollitionが設定できるので、ヒエラルキーからコリジョンを設定窓にドラッグアンドドロップします。
IsSwitchOn()関数はPublic関数ですので、別のオブジェクトから読み出すことができます。
これで実行すると
黒い壁が左に動きました。
これを応用して様々なことができますので、上記コードを改造して遊んでみてくださいね。