Понедельник, 23 Декабря 2024, 21:39

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Камера в пределах террейна
malis1Дата: Понедельник, 13 Ноября 2017, 16:36 | Сообщение # 1
был не раз
Сейчас нет на сайте
Привет всем,делаю игрулю rts,стратегия,top-down как вам угодно.
Двигаю камеру мышкой (для примера: как в варкрафте),все почти нормально то что мне нужно, есть большое но.
Как мне ограничить камеру что бы она могла перемещаться только в пределах террейна допустим?
Вот код как я ее двигаю.
Код

using UnityEngine;
using System.Collections;

public class CameraControler : MonoBehaviour
{

    public float SharpneasZoom;
    public float CameraPosition;
    public float CameraZoomMax;
    public float CameraZoomMin;
    public float CameraSpeed;
    public RaycastHit Hit;

    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        CameraHeightPosition();
        CameraWidthPosition();
    }

    void CameraHeightPosition()
    {

        Vector3 DirectionRay = transform.TransformDirection(Vector3.forward);

        if (Physics.Raycast(transform.position, DirectionRay, out Hit, 100))
        {
            if (Hit.collider.tag == "Terrainz")
            {

                if (Hit.distance < CameraPosition)
                {
                    transform.position += new Vector3(0, CameraPosition - Hit.distance, 0);
                }

                if (Hit.distance > CameraPosition)
                {
                    transform.position -= new Vector3(0, Hit.distance - CameraPosition, 0);
                }
            }
        }

        if ((Input.GetAxis("Mouse ScrollWheel") < 0) && (CameraPosition < CameraZoomMin))
        {

            CameraPosition += 7 * SharpneasZoom * Time.deltaTime;
             CameraSpeed += 0.007f;
        }

        if ((Input.GetAxis("Mouse ScrollWheel") > 0) && (CameraPosition > CameraZoomMax))
        {
            CameraPosition -= 7 * SharpneasZoom * Time.deltaTime;

            CameraSpeed -= 0.007f;
        }
    }

    void CameraWidthPosition()
    {
        //if (MS.NowMouseState == MouseState.MouseStats.Default)

        if (20 > Input.mousePosition.x)
        {
            transform.position -= new Vector3(CameraSpeed, 0, 0);
        }
        if ((Screen.width - 10) < Input.mousePosition.x)
        {

            transform.position += new Vector3(CameraSpeed, 0, 0);
        }
        if (20 > Input.mousePosition.y)
        {
            transform.position -= new Vector3(0, 0, CameraSpeed);
        }
        if ((Screen.height - 10) < Input.mousePosition.y)
        {
            transform.position += new Vector3(0, 0, CameraSpeed);
        }
    }
}

тут еще регулировка высоты камеры с учетом рельефа..
прошу и жду вашей помощи !!! :)
drcrackДата: Понедельник, 13 Ноября 2017, 18:03 | Сообщение # 2
старожил
Сейчас нет на сайте
Ну как-то так
Код
    void ClampCamera() {

  var terrain = Terrain.activeTerrain;
  var size = terrain.terrainData.size;
  var pos = terrain.GetPosition();

  var x = Mathf.Clamp(transform.position.x, pos.x, pos.x + size.x);
  var z = Mathf.Clamp(transform.position.z, pos.z, pos.z + size.z);

  transform.position = new Vector3(x, transform.position.y, z);

    }

вызываешь ее после своих двух
не тестил, может где-то косяк. разберешься
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг