Exemplo n.º 1
0
    /// <summary>
    /// 上下楼梯
    /// </summary>
    /// <param name="player"></param>
    /// <param name="stairState"></param>
    public void DownOrUp(Player player, StairState stairState)
    {
        // 获取当前层
        Layer preLayer = currentLayer.GetComponent <Layer>();

        // 获取当前楼层的索引
        int i = preLayer.CurrentLayer;

        // 判断是否将要进行下楼层
        if (stairState == StairState.Down)
        {
            // 当前楼层设置为fasle
            currentLayer.SetActive(false);

            // 当前楼层数-1
            i = i - 1;
            // 判断当前楼层是否被包含在激活的楼层集合中,如果没有包含,则添加当前楼层到激活的楼层集合中
            if (!EnableLayers.Contains(i))
            {
                EnableLayers.Add(i);
            }

            currentLayer = layers[i].gameObject;

            // 下一楼层为
            nextLayer = currentLayer.GetComponent <Layer>();

            // 将改变后的楼层设置为true
            currentLayer.SetActive(true);

            // 设置主角在楼层的位置
            player.transform.position = nextLayer.UpPosition.position;
        }
        else if (stairState == StairState.Up)
        {
            // 设置当前楼层为false
            currentLayer.SetActive(false);

            // 当前楼层数+1
            i = i + 1;

            // 判断当前楼层是否被包含在激活的楼层集合中,如果没有包含,则添加当前楼层到激活的楼层集合中
            if (!EnableLayers.Contains(i))
            {
                EnableLayers.Add(i);
            }

            currentLayer = layers[i].gameObject;

            // 下一楼层为
            nextLayer = currentLayer.GetComponent <Layer>();

            // 将改变后的楼层设置为true
            currentLayer.SetActive(true);

            // 设置主角在楼层的位置
            player.transform.position = nextLayer.DownPosition.position;
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (stairState == StairState.UP && timer <= movementTime)
        {
            timer += Time.deltaTime;
        }
        else if (stairState == StairState.DOWN && timer >= 0)
        {
            timer -= Time.deltaTime;
        }

        transform.position = Vector3.Lerp(startPosition, startPosition + movementVector, timer / movementTime);

        if (stairState == StairState.DELAYING)
        {
            delayTimer -= Time.deltaTime;
            if (delayTimer <= 0)
            {
                stairState = StairState.DOWN;
            }
        }
    }
 void ObjectDeactivate()
 {
     stairState = StairState.DOWN;
 }
 void ObjectActivate()
 {
     stairState = StairState.UP;
 }
 // Use this for initialization
 void Start()
 {
     stairState    = StairState.DOWN;
     startPosition = transform.position;
 }