2016-03-03 2 views
0

Я хочу, чтобы иметь возможность следить за вращающимся мячом (что я могу сделать сам по себе), и я хочу, чтобы иметь возможность вращаться вокруг мяча, удерживая правый клик (который я могу сделать сам по себе), но когда я пытаюсь объединить эти 2, я получаю нежелательные результаты.Unity, Следуйте за мячом и вращайтесь вокруг него

В приведенном ниже коде вы можете видеть, что если бы я просто хотел повернуть вокруг мяча, мой «RotateAround» позаботится об этом без проблем, и если бы я просто хотел следить за мячом, где бы он ни находился, когда камера находится на том же расстоянии прочь и угол, тогда мой _offset позаботится об этом. Когда я пытаюсь объединить 2, чтобы он следил за мячом и мог поворачивать камеру (с правым щелчком), в то же время камера просто останавливается после шара.

Я понял, что вы можете следить за мячом с помощью _offset, который я нашел в учебных пособиях Unity, что, когда позиция изменяется с помощью RotateAround, _offset позаботится о том, чтобы камера оставалась в новой позиции. Этот сценарий, кстати, находится на моем Camera GameObject.

void Start() 
{ 
    _offset = CamFollowStartSpot.position - Ball.transform.position; 
} 

void LateUpdate() 
{ 
    if (Input.GetMouseButton(1)) 
    { 
     _transform.RotateAround(Ball.transform.position, Vector3.up, 20 * Time.deltaTime); 
     _offset = _transform.position - Ball.transform.position; 
    } 
    _transform.position = Ball.transform.position + _offset; 
} 
+0

вы делаете это с * два отдельных игровых объектов *, один оберточной другой – Fattie

+0

@JoeBlow Можете ли вы объяснить, что вы имеете в виду, обернув другой пожалуйста. – JoeyL

+0

Я просто имею в виду сидеть один игровой объект внутри другого, у вас может быть три или четыре глубины. на одном уровне вы «повернете», а на следующем уровне вы будете «вращаться» или что угодно. с разными сценариями на каждом уровне. это обычная техника ... экспериментируйте с ней, когда у вас есть время! – Fattie

ответ

-1

Я понял, что случилось, это было, когда я устанавливал свою позицию в конце. Следующий код необходимо вызвать перед оператором IF для проверки ввода моего мыши.

_transform.position = Ball.transform.position + _offset; 

Правильный вариант приведен ниже.

void LateUpdate() 
{ 
    _transform.position = Ball.transform.position + _offset; 
    if (Input.GetMouseButton(1)) 
    { 
     _transform.RotateAround(Ball.transform.position, Vector3.up, 20 * Time.deltaTime); 
     _offset = _transform.position - Ball.transform.position; 
    } 
} 
Смежные вопросы