Unity2D Как заставить основную камеру непрерывно двигаться вверх по оси Y после того, как я щелкнул левой кнопкой мыши? - PullRequest
1 голос
/ 09 марта 2019

Я пытаюсь заставить мою основную камеру медленно перемещаться вверх по оси Y только после нажатия левой кнопки мыши.

Вот мой код.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class CameraPanUp : MonoBehaviour
{
    public float speed = 5f;
    public Transform target;

    Vector3 offset;

// Start is called before the first frame update
void Start()
{
    offset = transform.position - target.position;
}


// Update is called once per frame
void FixedUpdate()
{
    Vector3 targetCamPos = target.position + offset;
    transform.position = Vector3.Lerp(transform.position, targetCamPos, speed * Time.deltaTime);

    if (Input.GetMouseButtonDown(0))
    {

    }
}

}

Я не уверен, что поместить в утверждение if выше. Я пытался использовать transform.Translate раньше, и он просто заставлял камеру двигаться маленькими шагами каждый раз, когда я щелкаю левой кнопкой мыши. Это почему? Любая помощь будет с благодарностью.

1 Ответ

0 голосов
/ 09 марта 2019

Один из вариантов - использовать сопрограммы:

Coroutine moveCoroutine;
IEnumerator StartMovingUp() {
  float moveSpeed = 2f;
  while(true) {
    transform.Translate(0, moveSpeed * Time.deltaTime, 0);
    yield return null;
  }
}
void Update() {
  if (Input.GetMouseButtonDown(0) && moveCoroutine == null) {
    moveCoroutine = StartCoroutine(StartMovingUp());
  }
}

другой делает это в функции Update с полями для состояния.Что-то еще может сделать код слишком сложным.

bool isMovingUp;
float moveSpeed = 2f;
void Update() {
  if (Input.GetMouseButtonDown(0)) {
    isMovingUp = true;
  }
  if (isMovingUp) {
    transform.Translate(0, moveSpeed * Time.deltaTime, 0);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...