Можно ли переместить курсор из кода C# и как?
Хочу реализовать отдачу в своей игре, но из-за того что есть скрипт CameraController, после ротации камеры код получает координаты мыши и возвращает ее обратно, тоесть нужно перемешать курсор, надеюсь на вашу помощь.
Ответы (2 шт):
Попробуй написать в коде своего CameraController
изменение сохраненной позиции мыши так, чтобы при чтении новой двигалось вверх.
У тебя возврат мыши к центральной позиции. Добавь код, который запомнит, что у тебя "произошла отдача", и при очередном чтении движения мыши добавит вращение к камере.
И добавляй код в свои вопросы.
Пользовался таким приемом. Делаешь объект-Цель который у тебя размещен именно где нужно, смотрит в правильном направлении и который управляется мышкой, то есть ваш контроллер управляет именно этим объектом. Для камеры пишешь простенький скрипт который занимается тем что стремиться совместить твою камеру с этим объектом. Чтобы все это было красиво при отклонениях наблюдателя от цели делаешь на update плавное совмещение положения и поворота на цель.
Когда то пользовался таким скриптом: взято отсюда https://ru.stackoverflow.com/a/781002/33519
public class FollowMe : MonoBehaviour
{
public Transform Target = null;
public bool Smoothing = true;
public Transform LookObject = null;
public bool KeepDistance = true;
public float TimeMoving = 0.5f;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Target != null)
{
if (Smoothing)
{
float distance = 0f;
if (LookObject != null)
{
distance = (transform.position - LookObject.position).magnitude;
}
transform.position = Vector3.Slerp(transform.position, Target.position, Time.deltaTime / TimeMoving);
transform.rotation = Quaternion.Slerp(transform.rotation, Target.rotation, Time.deltaTime / TimeMoving);
if (LookObject != null && KeepDistance)
{
Vector3 direction = transform.position - LookObject.position;
if (distance > direction.magnitude)
transform.position = LookObject.position + direction.normalized * distance;
}
}
else
{
transform.position = Target.position;
transform.rotation = Target.rotation;
}
}
}
}
target - у нас объект за которым должна следовать камера. Скажем персонаж игры.
lookObject - это если требуется смотреть при этом за вторым объектом, грубо говоря если камера за спиной персонажа, то lookObject это объект перед персонажем, чтобы камера смотрела перед персонажем, а не на его зад
smoothing - делать переходы плавными или жестко совмещать, может быть полезно когда таргетовый объект уже анимирован и надо просто повторять его движения, тогда отключаем/включаем
timeMoving - время за которое твой объект в данном случае камера должна совмещать состояние в случае отклонений от Цели.
keepDistance - это если требуется чтобы ваш объект держался от цели на заданном расстоянии и не приближался. То есть перед началом работы ставишь камеру за 5 метров от объекта цели и она всегда будет стремится к нему приблизиться на эти пять метров и смотреть в его сторону.
Таким образом при отдаче ты поворачиваешь саму камеру как тебе надо, а объект-цель остается в прежнем положении и камера сама скорей стремиться развернуться в нужном направлении. Если при этом мышкой начнут крутить и смещать цель, то и камера начнет плавно двигаться в ту сторону, будет похоже на эффект как будто ты в себя приходишь и возвращаешься к нормальному состоянию.