Остановить камеру от перемещения через объекты - PullRequest
0 голосов
/ 07 мая 2018

На эту тему много вопросов, но я не смог найти подходящий для меня.

У меня есть скрипт движения камеры, который выглядит следующим образом:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine.Networking;

[AddComponentMenu("Camera-Control/Smooth Mouse Look")]
public class SmoothMouseLook : NetworkBehaviour
{
    [Header("Character camera.")]
    private Camera myCamera;
    [Header("Location where camera will always be looking at.")]
    public Transform characterHead;

    [Header("How fast will camera zoom work")]
    public float cameraScrollSensitivity = 2f;

    [Header("Default position of camera")]
    public Vector3 cameraPos = new Vector3(0, 2, 0);

    public Vector3 minPos = new Vector3(-4, -4, -5);
    public Vector3 maxPos = new Vector3(4, 4, -1);

    [Header("How fast will camera move on Y axis")]
    public float cameraSensitivityY = 0.8f;
    [Header("How fast will camera move on X axis")]
    public float cameraSensitivityX = 0.8f;

    public enum InvertX { False = 0, True = 1 }
    public enum InvertY { False = 0, True = 1 }

    public InvertX invertX = InvertX.False;
    public InvertY invertY = InvertY.False;

    void Start()
    {
        if (!isLocalPlayer)
            return;

        Camera.main.gameObject.transform.parent = this.transform;
        Camera.main.gameObject.transform.localPosition = cameraPos;
        myCamera = Camera.main;

        myCamera.transform.LookAt(characterHead);

    }
    void Update()
    {
        if (!isLocalPlayer)
            return;

        Vector3 currPos = myCamera.transform.localPosition;

        currPos.z += Input.GetAxis("Mouse ScrollWheel") * cameraScrollSensitivity;
        if (currPos.z > maxPos.z)
            currPos.z = maxPos.z;
        if (currPos.z < minPos.z)
            currPos.z = minPos.z;

        if (Input.GetMouseButton(2))
        {

            if(invertY == 0)
                currPos.y -= Input.GetAxis("Mouse Y") * cameraSensitivityY / 10;
            else
                currPos.y += Input.GetAxis("Mouse Y") * cameraSensitivityY / 10;


            if (invertX == 0)
                currPos.x += Input.GetAxis("Mouse X") * cameraSensitivityX / 10;
            else
                currPos.x -= Input.GetAxis("Mouse X") * cameraSensitivityX / 10;


            if (currPos.y > maxPos.y)
                currPos.y = maxPos.y;
            if (currPos.y < minPos.y)
                currPos.y = minPos.y;
            if (currPos.x > maxPos.x)
                currPos.x = maxPos.x;
            if (currPos.x < minPos.x)
                currPos.x = minPos.x;
        }

        myCamera.transform.localPosition = currPos;

        myCamera.transform.LookAt(characterHead);
    }
}

Этот скрипт прикреплен к персонажу, а камера - к нему ребенок.

Как и в заголовке, проблема в том, что камера может проходить через меш (объекты и ландшафт).

Я пытался установить маску обрезки на 0,01 и 1 (по умолчанию 0,3), но ничего не происходит.

Я попытался добавить коллайдер, который работает, НО, когда я толкаю камеру на землю, она сталкивается, не подводит камеру, но поднимает символ: /

Единственная идея, которую я имею, - это кодирование с помощью Raycast, но, поскольку я новичок во всем этом, я хотел проверить, есть ли какой-либо другой способ сделать это (например, с коллайдером, но не поднимать символ), потому что это займет много времени. мое время выяснить это с помощью Raycast.

1 Ответ

0 голосов
/ 07 мая 2018

Не могли бы вы попробовать сделать это. Если вы имеете в виду не проходить через сетки, подобные камере в Unreal Engine, вы можете сделать это примерно так

  1. Выберите камеру, пройдите инспектор и установите для ближайших плоскостей отсечения значение 0,1
  2. создать пустой игровой объект. Дайте пустому ящику коллайдер и установите его в точное местоположение камеры. Наконец установите пустой объект в качестве родителя камеры. Теперь, когда вы двигаете Пустой, он перемещает камеру и не проходит сквозь стены.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...