public void CharacterMoveUpdate(int moveOrientation) { if (isPushingOrPull) { // 如果正在推或者拉 if (characterOrientation == moveOrientation || characterOrientation == (moveOrientation + 2) % 4) { if (operatingFurnitureController.TryToMoveFurnitureOffset(currentCoordinate, orientationArray[moveOrientation])) { // 如果家具可以向上推动 //this.transform.position = this.transform.position + new Vector3( orientationArray[moveOrientation].x * 2.5f, 0.0f, orientationArray[moveOrientation].y * 2.5f ); isMoving = true; currentCoordinate += orientationArray[moveOrientation]; endPosition = mainWorldController.GetTilePosition(currentCoordinate); direction = Vector3.Normalize(endPosition - this.transform.position); if (characterOrientation == moveOrientation) { targetCoordinate = currentCoordinate + orientationArray[moveOrientation]; } else { targetCoordinate = currentCoordinate - orientationArray[moveOrientation]; } if (mainWorldController.CheckTileOperatable(targetCoordinate)) { operatableTarget.SetActive(true); operatableTarget.transform.position = mainWorldController.GetTilePosition(targetCoordinate); } else { operatableTarget.SetActive(false); } } } } else { if (characterOrientation != moveOrientation) { this.transform.rotation = Quaternion.Euler(0, moveOrientation * 90.0f, 0); characterOrientation = moveOrientation; targetCoordinate = currentCoordinate + orientationArray[moveOrientation]; if (mainWorldController.CheckTileOperatable(targetCoordinate)) { operatableTarget.SetActive(true); operatableTarget.transform.position = mainWorldController.GetTilePosition(targetCoordinate); } else { operatableTarget.SetActive(false); } } if (mainWorldController.CheckTilePassable(currentCoordinate + orientationArray[moveOrientation])) { //this.transform.position = this.transform.position + new Vector3(orientationArray[moveOrientation].x * 2.5f, 0.0f, orientationArray[moveOrientation].y * 2.5f); isMoving = true; currentCoordinate += orientationArray[moveOrientation]; endPosition = mainWorldController.GetTilePosition(currentCoordinate); direction = Vector3.Normalize(endPosition - this.transform.position); targetCoordinate += orientationArray[moveOrientation]; if (mainWorldController.CheckTileOperatable(targetCoordinate)) { operatableTarget.SetActive(true); operatableTarget.transform.position = mainWorldController.GetTilePosition(targetCoordinate); } else { operatableTarget.SetActive(false); } } } }