Можно ли переместить курсор из кода C# и как?

Хочу реализовать отдачу в своей игре, но из-за того что есть скрипт CameraController, после ротации камеры код получает координаты мыши и возвращает ее обратно, тоесть нужно перемешать курсор, надеюсь на вашу помощь.


Ответы (2 шт):

Автор решения: Тихирун Ррр

Попробуй написать в коде своего CameraController изменение сохраненной позиции мыши так, чтобы при чтении новой двигалось вверх.

У тебя возврат мыши к центральной позиции. Добавь код, который запомнит, что у тебя "произошла отдача", и при очередном чтении движения мыши добавит вращение к камере.

И добавляй код в свои вопросы.

→ Ссылка
Автор решения: KingPeas

Пользовался таким приемом. Делаешь объект-Цель который у тебя размещен именно где нужно, смотрит в правильном направлении и который управляется мышкой, то есть ваш контроллер управляет именно этим объектом. Для камеры пишешь простенький скрипт который занимается тем что стремиться совместить твою камеру с этим объектом. Чтобы все это было красиво при отклонениях наблюдателя от цели делаешь на 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 метров от объекта цели и она всегда будет стремится к нему приблизиться на эти пять метров и смотреть в его сторону.

Таким образом при отдаче ты поворачиваешь саму камеру как тебе надо, а объект-цель остается в прежнем положении и камера сама скорей стремиться развернуться в нужном направлении. Если при этом мышкой начнут крутить и смещать цель, то и камера начнет плавно двигаться в ту сторону, будет похоже на эффект как будто ты в себя приходишь и возвращаешься к нормальному состоянию.

→ Ссылка