/// <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; }