zhenya88 писал(а):как перетюнить камеру .
zhenya88 писал(а):Привет! тут ламаю се голову уже неделю как перетюнить камеру так чтоб она была как в стратегиях, тоисть была стрелка которая за рамки екрана не выходила и когда ты подводиш к краю то перемещаешся над почвой камерой (например варкрафт). Подскажыте кто знает плиз, заранее благодарен.
Golandez писал(а):zhenya88 писал(а):как перетюнить камеру .
Это язык детей Эмо? Общепринятым не свойственно общаться?
Zaicheg писал(а):zhenya88 писал(а):Привет! тут ламаю се голову уже неделю как перетюнить камеру так чтоб она была как в стратегиях, тоисть была стрелка которая за рамки екрана не выходила и когда ты подводиш к краю то перемещаешся над почвой камерой (например варкрафт). Подскажыте кто знает плиз, заранее благодарен.
Отслеживаешь координаты мыши относительно границ экрана, перемещаешь камеру. Ещё вопросы?
zhenya88 писал(а):Ну у меня на фирме (девелоперской) слово "перетюнить" считаеться нормальным, незнаю к чему ты к ІТ - Эмо вяжеш )))))
Golandez писал(а):zhenya88 писал(а):Ну у меня на фирме (девелоперской) слово "перетюнить" считаеться нормальным, незнаю к чему ты к ІТ - Эмо вяжеш )))))
Безграмотность тоже на вашей фирме считается нормально?
P.S.*Ушел за попкорном*
zhenya88 писал(а):ну вообщем с логикой того как оно должно работать у меня проблем нету, проблема что я незнаю как ето зделать на Unity
zhenya88 писал(а):я Украинец, и Руский никогда не учил, еще вопросы ? или те по укр писать ? лутше бы дал мудрый совет по вопросу, чем умничать кто и как пишет....
var speed = 10;
var rotspeed = 40;
var maxdist = 400;
var mask : LayerMask;
private var horiz : float = 0;
private var vert : float = 0;
private var zoom : float = 0;
private var roty : float = 0;
private var rotx : float = 0;
private var hit : RaycastHit;
private var prehit : RaycastHit;
function FixedUpdate () {
vert = Input.GetAxis ("Vertical");
horiz = Input.GetAxis ("Horizontal");
zoom = Input.GetAxis ("Zoom");
rotx = Input.GetAxis ("Rotatex");
roty = Input.GetAxis ("Rotatey");
if (horiz != 0 || vert != 0 || zoom != 0) {
dir = transform.TransformDirection(Vector3.up);
dir.y = 0;
dir = dir.normalized;
dir2 = transform.TransformDirection(Vector3.right);
dir2.y = 0;
dir2 = dir2.normalized;
dir3 = transform.TransformDirection(Vector3.forward);
//dir3.y = 0;
dir3 = dir3.normalized;
/*var dir = transform.TransformDirection (Vector3.right);
var dir2 = transform.TransformDirection (Vector3.up);
dir2.y = 0;
pos += dir * horiz;
pos += dir2 * vert;
transform.position = pos;*/
rigidbody.AddForce (dir2 * Time.deltaTime * horiz * speed);
rigidbody.AddForce (dir * Time.deltaTime * vert * speed);
if (transform.position.y <= maxdist || zoom > 0) {
rigidbody.AddForce (dir3 * Time.deltaTime * zoom * speed);
}
//transform.position = Vector3.Lerp (transform.position, pos, Time.deltaTime * smooth);
}
if (rotx != 0 || roty != 0) {
Physics.Raycast (transform.position,transform.TransformDirection (Vector3.forward),hit,1500, mask);
if (hit.point != Vector3.zero) {
transform.RotateAround (hit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
transform.RotateAround (hit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
prehit = hit;
} else {
transform.RotateAround (prehit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
transform.RotateAround (prehit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
}
}
}
Garu писал(а):Попробуй юзнуть эту штуку, может поможет...
- Код: Выделить всё
var speed = 10;
var rotspeed = 40;
var maxdist = 400;
var mask : LayerMask;
private var horiz : float = 0;
private var vert : float = 0;
private var zoom : float = 0;
private var roty : float = 0;
private var rotx : float = 0;
private var hit : RaycastHit;
private var prehit : RaycastHit;
function FixedUpdate () {
vert = Input.GetAxis ("Vertical");
horiz = Input.GetAxis ("Horizontal");
zoom = Input.GetAxis ("Zoom");
rotx = Input.GetAxis ("Rotatex");
roty = Input.GetAxis ("Rotatey");
if (horiz != 0 || vert != 0 || zoom != 0) {
dir = transform.TransformDirection(Vector3.up);
dir.y = 0;
dir = dir.normalized;
dir2 = transform.TransformDirection(Vector3.right);
dir2.y = 0;
dir2 = dir2.normalized;
dir3 = transform.TransformDirection(Vector3.forward);
//dir3.y = 0;
dir3 = dir3.normalized;
/*var dir = transform.TransformDirection (Vector3.right);
var dir2 = transform.TransformDirection (Vector3.up);
dir2.y = 0;
pos += dir * horiz;
pos += dir2 * vert;
transform.position = pos;*/
rigidbody.AddForce (dir2 * Time.deltaTime * horiz * speed);
rigidbody.AddForce (dir * Time.deltaTime * vert * speed);
if (transform.position.y <= maxdist || zoom > 0) {
rigidbody.AddForce (dir3 * Time.deltaTime * zoom * speed);
}
//transform.position = Vector3.Lerp (transform.position, pos, Time.deltaTime * smooth);
}
if (rotx != 0 || roty != 0) {
Physics.Raycast (transform.position,transform.TransformDirection (Vector3.forward),hit,1500, mask);
if (hit.point != Vector3.zero) {
transform.RotateAround (hit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
transform.RotateAround (hit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
prehit = hit;
} else {
transform.RotateAround (prehit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
transform.RotateAround (prehit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
}
}
}
DbIMok писал(а):думаю нет смысла "держать" мышку в игре. при нахождении мышки в пределах n-пиксельной зоны в течении m-миллисекунд, начинать двигать камеру над поверхностью в этом направлении, пока мышка остается в этой n-пиксельной зоне. реализовать можно как большие невидимые кнопки по границам игровой области или через отслеживание координат. надо смотреть что оптимальнее в зависимости от конкретной ситуации.
Zaicheg писал(а):zhenya88 писал(а):ну вообщем с логикой того как оно должно работать у меня проблем нету, проблема что я незнаю как ето зделать на Unity
На Unity это делается через ScriptReference и:
Input (mousePosition)
Screen (height, width)
Transform (Translate, position, etc)
Terrain (sampleHeight)
как теперь зеделать чтоб она по высоте "ползла" по Тerain
if (transform.position.y <= Terrain.activeTerrain.SampleHeight(transform.position))
transform.position = new Vector3(transform.position.x, transform.position.y + 50f, transform.position.z);
using UnityEngine;
using System.Collections;
public class MainCamera : MonoBehaviour {
public float MainCameraSpeed;
public float MainCameraScrollSpeed;
public Vector2 MousePosition;
private float x, y, z;
private float SpeedScreen = 40f;
private float MainCameraHight;
// В эти переменные записываются процентное отношения экрана со всех сторон
private float sForward, sBack, sLeft, sRigth;
void Start ()
{
MainCameraHight = 100f;
}
void Update ()
{
// Привязка высоты камеры к высоте террайна
transform.position = new Vector3(transform.position.x, Terrain.activeTerrain.SampleHeight(transform.position) + MainCameraHight, transform.position.z);
MousePosition = Input.mousePosition;
x = transform.position.x;
y = transform.position.y;
z = transform.position.z;
// Движение камеры по карте
float antToMovieH = (Input.GetAxisRaw("Horizontal") * MainCameraSpeed * Time.deltaTime);
float antToMovieV = (Input.GetAxisRaw("Vertical") * MainCameraSpeed * Time.deltaTime);
transform.Translate(Vector3.right * antToMovieH, Space.World);
transform.Translate(Vector3.forward * antToMovieV, Space.World);
// ограничение на скрол по оси У
if (transform.position.y >= 500f)
{
transform.position = new Vector3(transform.position.x, 500f, transform.position.z);
transform.position = new Vector3(x, y, z);
}
// Что бы не вылетала за пределы карты
if (transform.position.x <= 221f)
transform.position = new Vector3(221f, transform.position.y, transform.position.z);
if (transform.position.x >= 4788f)
transform.position = new Vector3(4788f, transform.position.y, transform.position.z);
if (transform.position.z <= 100f)
transform.position = new Vector3(transform.position.x, transform.position.y, 100f);
if (transform.position.z >= 4900f)
transform.position = new Vector3(transform.position.x, transform.position.y, 4900f);
// Высчитываем процентное отношение экрана с каждой стороны
sForward = (Screen.height * 98) / 100;
sBack = (Screen.height * 2) / 100;
sRigth = (Screen.width * 98) / 100;
sLeft = (Screen.width * 2) / 100;
// Движние экрана, если курсор мыши приближается к его краю
if (MousePosition.y >= sForward)
transform.Translate(Vector3.forward * SpeedScreen, Space.World);
if (MousePosition.y <= sBack)
transform.Translate(Vector3.back * SpeedScreen, Space.World);
if (MousePosition.x >= sRigth)
transform.Translate(Vector3.right * SpeedScreen, Space.World);
if (MousePosition.x <= sLeft)
transform.Translate(Vector3.left * SpeedScreen, Space.World);
}
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9