C#_Unity_逆引き03
■移動床
https://futabazemi.net/unity/move_floor/
https://futabazemi.net/unity/drop_floor/
https://futabazemi.net/unity/elevator/
【スライド床】
[PL]
if(transform.parent == null && collision.gameObject.name == "Floor_Slide")
{
var emptyObject = new GameObject();
emptyObject.transform.parent = collision.gameObject.transform;
transform.parent = emptyObject.transform;
}
private void OnCollisionExit(Collision collision)
{
if (transform.parent != null && collision.gameObject.name == "Floor_Slide")
{
transform.parent = null;
}
}
-----------
[Floor]
int counter = 0;
float move = 0.01f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 p = new Vector3(move, 0, 0);
transform.Translate(p);
counter++;
if (counter == 300)
{
counter = 0;
move *= -1;
}
}
--
--
【EV】
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FloorEV : MonoBehaviour
{
private Vector3 pos;
public bool is2ndFloor;
void Start()
{
is2ndFloor = false;
}
//2階へ上昇
public void MoveUp()
{
StartCoroutine("MoveUpStart");
}
IEnumerator MoveUpStart()
{
while (pos.y < 3.0f)
{
pos = transform.position;
transform.Translate(0, 0.02f, 0);
yield return new WaitForSeconds(0.01f);
}
is2ndFloor = true;
}
//1階へ下降
public void MoveDown()
{
StartCoroutine("MoveDownStart");
}
IEnumerator MoveDownStart()
{
while (pos.y > 0.0f)
{
pos = transform.position;
transform.Translate(0, -0.02f, 0);
yield return new WaitForSeconds(0.01f);
}
is2ndFloor = false;
}
}
---------------
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.name == "Area")
{
if (elevator.GetComponent<FloorEV>().is2ndFloor == false)
{
elevator.GetComponent<FloorEV>().MoveUp();
}
if (elevator.GetComponent<FloorEV>().is2ndFloor == true)
{
elevator.GetComponent<FloorEV>().MoveDown();
}
}
}