- 特定のキーを押すとドアが左右に開く
- 別のキーを押すとドアが閉じる。
(スクリプトの作成)
<左ドア専用>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 左ドア専用
public class DoorMove_L : MonoBehaviour
{
private int num = 0;
public Vector3 targetPos1;
public Vector3 targetPos2;
void Update()
{
Vector3 pos = transform.position;
if(Input.GetKeyDown(KeyCode.Y))
{
num = -1;
}
else if(Input.GetKeyDown(KeyCode.U))
{
num = 1;
}
// 「0」「1」「−1」を掛けることでドアの動きを制御する。
transform.Translate(num * transform.right * Time.deltaTime * 1.5f);
// 指定した位置で止める。
if (pos.x < targetPos1.x)
{
// 0を掛けることで移動を停止する。
num = 0;
pos.x = targetPos1.x;
transform.position = pos;
}
if(pos.x > targetPos2.x)
{
num = 0;
pos.x = targetPos2.x;
transform.position = pos;
}
}
}
<右ドア専用>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 右ドア専用
public class DoorMove_R : MonoBehaviour
{
private int num = 0;
public Vector3 targetPos1;
public Vector3 targetPos2;
void Update()
{
Vector3 pos = transform.position;
if(Input.GetKeyDown(KeyCode.Y))
{
num = 1;
}
else if(Input.GetKeyDown(KeyCode.U))
{
num = -1;
}
transform.Translate(num * transform.right * Time.deltaTime * 1.5f);
if(pos.x > targetPos1.x)
{
num = 0;
pos.x = targetPos1.x;
transform.position = pos;
}
if(pos.x < targetPos2.x)
{
num = 0;
pos.x = targetPos2.x;
transform.position = pos;
}
}
}
(設定)
- 左右のドアオブジェクトに対応したスクリプトを追加する。
- ドアを止めたい位置(座標)を指定する。


- 設定が完了したらゲームを再生
- 「Y」ボタンでドアが左右に開く
- 「U」ボタンでドアが閉じれば成功です。



<<ホームドアのモジュール化>>
- モジュール化することで簡単に複製(量産)できるようになります。
(親子関係を使ってオブジェクトの改良)


(スクリプトの改良)
<左ドア専用>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 左ドア2
public class DoorMove_L2 : MonoBehaviour
{
private int num = 0;
private Vector3 targetPos1;
private Vector3 targetPos2;
void Start()
{
// このホームドアの最初の位置を取得する。
Vector3 initialPos = transform.position;
// ドアをどこまで移動させるかを決める。
targetPos1.x = initialPos.x - 3;
// ドアをどこに戻すかを決める。
targetPos2.x = initialPos.x;
}
void Update()
{
Vector3 pos = transform.position;
if(Input.GetKeyDown(KeyCode.Y))
{
num = -1;
}
else if(Input.GetKeyDown(KeyCode.U))
{
num = 1;
}
// 「0」「1」「−1」を掛けることでドアの動きを制御する。
transform.Translate(num * transform.right * Time.deltaTime * 1.5f);
// 指定した位置で止める。
if(pos.x < targetPos1.x)
{
// 0を掛けることで移動を停止する。
num = 0;
pos.x = targetPos1.x;
transform.position = pos;
}
if(pos.x > targetPos2.x)
{
num = 0;
pos.x = targetPos2.x;
transform.position = pos;
}
}
}
<右ドア専用>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 右ドア2
public class DoorMove_R2 : MonoBehaviour
{
private int num = 0;
private Vector3 targetPos1;
private Vector3 targetPos2;
private void Start()
{
Vector3 initialPos = transform.position;
targetPos1.x = initialPos.x + 3;
targetPos2.x = initialPos.x;
}
void Update()
{
Vector3 pos = transform.position;
if (Input.GetKeyDown(KeyCode.Y))
{
num = 1;
}
else if (Input.GetKeyDown(KeyCode.U))
{
num = -1;
}
transform.Translate(num * transform.right * Time.deltaTime * 1.5f);
if (pos.x > targetPos1.x)
{
num = 0;
pos.x = targetPos1.x;
transform.position = pos;
}
if (pos.x < targetPos2.x)
{
num = 0;
pos.x = targetPos2.x;
transform.position = pos;
}
}
}
(実行結果)
- ホームドアを複製して確認してみましょう。



