魔法のメモ

CG N GAME BLOG

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();
            }
        }
    }