кажется тут надо использовать ScreenToWorldPoint, как раз в описании сказано что это трансформ позиции точки на экране в мировые координаты
Добавлено (14 апреля 2017, 11:45) --------------------------------------------- вот решение
Код
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Walls : MonoBehaviour {
public Camera cam; public GameObject WallTop; public GameObject WallBot; public GameObject WallLeft; public GameObject WallRight; Vector3 t = new Vector3(); Vector3 b = new Vector3(); Vector3 l = new Vector3(); Vector3 r = new Vector3();
void Start () { t = cam.ScreenToWorldPoint (new Vector3 ((cam.pixelWidth / 2), cam.pixelHeight+4, 0)); WallTop.transform.Translate (t); b = cam.ScreenToWorldPoint (new Vector3 ((cam.pixelWidth / 2), -4, 0)); WallBot.transform.Translate (b); l = cam.ScreenToWorldPoint (new Vector3 (-4, (cam.pixelHeight / 2), 0)); WallLeft.transform.Translate (l); r = cam.ScreenToWorldPoint (new Vector3 (cam.pixelWidth+4, (cam.pixelHeight / 2), 0)); WallRight.transform.Translate (r); } }
теперь ограничивающие гейм обджекты подстраиваются точнехонько под размеры экрана
Сообщение отредактировал priestevi - Пятница, 14 Апреля 2017, 08:17
всем привет, столкнулся с такой вот штукой, экраны ты разные у телефонов\планшетов поэтому и камера в 2д игре отображает по разному все, собственно теперь вопрос: у меня по внешним краям стоят игровые объекты призванные ограничить вылет npc за границы экрана, я решил каждый раз при старте сцены их выставлять скриптом ровно за границей экрана что бы казалось что объект отскакивает от краёв экрана, но почему то скрипт слишком далеко закидывает эти самые объекты хотя вроде в скрипте то я правильно рассуждаю насчет расчета положения объектов
Код
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Walls : MonoBehaviour {
public Camera cam; public GameObject WallTop; public GameObject WallBot; public GameObject WallLeft; public GameObject WallRight; float x; //height высота float y; //width ширина float t; float b; float l; float r;
void Start () { x = Screen.height; y = Screen.width; t = (x / 2) + 2; b = ((x / 2) + 2) * (-1); l = ((y / 2) + 2) * (-1); r = (y / 2) + 2; WallTop.transform.Translate (0, t, 0); WallBot.transform.Translate (0, b, 0); WallLeft.transform.Translate (l, 0, 0); WallRight.transform.Translate (r, 0, 0); }
}
вроде же вполне логично выставлять расстояние узнав общую высоту экрана разделить ее на 2 (что бы от центра двигать) и прибавить немного что бы за края ушло а вот что выходит
может есть у кого мысли какие?
Сообщение отредактировал priestevi - Четверг, 13 Апреля 2017, 12:41
Проблема решена, путем перебора всего и вся понял, что всему виной был точечный коллайдер, висящий на камере в центре экрана, и его не было видно из за значка камеры
всем привет форумчане! столкнулся вот с таким вот непонятным явлением, имеется кубик на сцене, я заставил его вверх-вниз перемещаться, все работает все в порядке, но если его поместить так что бы он проходил через точку (0, 0) то он сталкивается с чем то непонятным и вообще стопается об него. я проверил все объекты на сцене, ничего нету что могла бы сбыть препятствием в точке (0, 0), слои тоже проверял, кубик единственный объект на слое, по идее ничто не должно ему мешать, но вот что то там непонятное мешается
п.с. в том месте где кубик начинает вращаться он как раз задевает это препятствие
всем спасибо за ответы! сейчас сяду переделывать и обязательно сообщу результат Rean ваш первый вариант это именно тот результат которого я хочу добиться итак в общем все работает по примеру товарища Rean`а спасибо за помощь, я бы в этих нюансах сам не разобрался скорее всего. Вот итоговый код если вдруг кому то пригодится
Код
using UnityEngine; using System.Collections;
public class PlayerController : MonoBehaviour { public Transform capsule; public float capsuleAngleRotation; float speed = 10; Rigidbody rb;
void FixedUpdate () { Vector3 dir = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical")) * speed; dir = Vector3.ClampMagnitude(dir, speed);
if (dir != Vector3.zero) { rb.MovePosition(transform.position + dir * Time.deltaTime); rb.MoveRotation(Quaternion.LookRotation(dir)); } }
}
Добавлено (10 февраля 2017, 11:49) --------------------------------------------- в моем сферическом мире капсула теперь во время движения перестала находиться перпендикулярно земле на экваторе, подскажите пожалуйста как сделать что бы капсула была перпендикулярно земле? в самом начале где у меня еще было кривое вращение там перпендикуляр соблюдался при движении по всей окружности вот пример мира
как стало работать
Сообщение отредактировал priestevi - Пятница, 10 Февраля 2017, 09:03
доброго времени суток уважаемые! вот нелёгкая занесла меня на форум ибо уже всю голову сломал пытаясь понять в каком направлении идти. собственно сделал капсулу на нее повесил скрипт движения и дописал туда кусок кода что бы капсула поворачивалась в сторону движения но после ее поворота оси как то проворачиваются что ли и нажимая движение влево капсула поворачивается туда и едет вниз. я так понимаю что оси ввода поворачиваются вместе с капсулой но что то не могу понять уже часов 5 как это исправить п.с. камера статичная как в диабло
Код
using UnityEngine; using System.Collections;
public class PlayerController : MonoBehaviour { public Transform capsule; public float capsuleAngleRotation; float speed = 10; Rigidbody rb;