Синтаксис:
Используется csharp
public Transform Before, camera;
public static volatile bool IsMove = false;
public Camera cam;
private float Speed = 0f;
private void FixedUpdate() {
Speed = Rb.velocity.magnitude / 0.5f;
IsMove = 1 > Speed;
Camera.position = Vector3.Lerp(Camera.position, Before.position, (Speed <= 0 ? 11 : Speed) * Time.fixedDeltaTime);
}
public static volatile bool IsMove = false;
public Camera cam;
private float Speed = 0f;
private void FixedUpdate() {
Speed = Rb.velocity.magnitude / 0.5f;
IsMove = 1 > Speed;
Camera.position = Vector3.Lerp(Camera.position, Before.position, (Speed <= 0 ? 11 : Speed) * Time.fixedDeltaTime);
}
Никак не могу сделать, чтобы не выходила за границы, но при этом можно было двигать туда, где еще нет упора в границу.
Я пытался сделать так:
Синтаксис:
Используется csharp
if (!Physics.Raycast(cam.ViewportPointToRay(new Vector3(1, 0, 0)), cam.farClipPlane, terrainLayer)) {
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Right");
} else if (!Physics.Raycast(cam.ViewportPointToRay(new Vector3(0, 1, 0)), cam.farClipPlane, terrainLayer)) {
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Left");
}
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Right");
} else if (!Physics.Raycast(cam.ViewportPointToRay(new Vector3(0, 1, 0)), cam.farClipPlane, terrainLayer)) {
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Left");
}
Но никак не получается рассчитать верх и низ.
Получается, какая-то дичь (вообще не правильно работает, все равно, засветы какие-то, прыжки по сторонам, не то, что нужно).
Мне нужно, чтобы камера двигалась, только до границ тиррейна.
Как вообще это можно сделать?!
Выручайте уже всю голову сломал.
Весь код:
Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;
public sealed class ExplodedObject : MonoBehaviour {
public static volatile bool IsMove = false;
public Camera cam;
public Rigidbody Rb;
public Transform Before,
camera;
private void FixedUpdate() {
Speed = Rb.velocity.magnitude / 0.5f;
IsMove = 1 > Speed;
Vector3 oldPosition = camera.position;
camera.position = Vector3.Lerp(camera.position, Before.position, (Speed <= 0 ? 11 : Speed) * Time.fixedDeltaTime);
int terrainLayer = LayerMask.GetMask("Terrain");
if (!Physics.Raycast(cam.ViewportPointToRay(new Vector3(1, 0, 0)), cam.farClipPlane, terrainLayer)) {
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Right");
} else if (!Physics.Raycast(cam.ViewportPointToRay(new Vector3(0, 1, 0)), cam.farClipPlane, terrainLayer)) {
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Left");
}
}
}
using UnityEngine;
public sealed class ExplodedObject : MonoBehaviour {
public static volatile bool IsMove = false;
public Camera cam;
public Rigidbody Rb;
public Transform Before,
camera;
private void FixedUpdate() {
Speed = Rb.velocity.magnitude / 0.5f;
IsMove = 1 > Speed;
Vector3 oldPosition = camera.position;
camera.position = Vector3.Lerp(camera.position, Before.position, (Speed <= 0 ? 11 : Speed) * Time.fixedDeltaTime);
int terrainLayer = LayerMask.GetMask("Terrain");
if (!Physics.Raycast(cam.ViewportPointToRay(new Vector3(1, 0, 0)), cam.farClipPlane, terrainLayer)) {
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Right");
} else if (!Physics.Raycast(cam.ViewportPointToRay(new Vector3(0, 1, 0)), cam.farClipPlane, terrainLayer)) {
camera.position = new Vector3(oldPosition.x, camera.position.y, oldPosition.z);
print("Left");
}
}
}
Ничего не получается сделать, выручайте пожалуйста знатоки!
Буду весьма признателен и благодарен!
То есть вот такой момент:
Чтобы автоматически знала, что дошла до правой, можно значит, вверх и вниз двигать только (точнее вперед, назад), дошли верха, значит только вниз и влево можно двигать, ну в общем я думаю суть вы понимаете.