Как работает метод Move скрипта CharacterController?
|
|
Chaz | Дата: Среда, 15 Января 2014, 14:58 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Привет. Смотрите какая задача, нужно двигать персонажа в ту сторону, в которую смотрит камера. Для этого я беру одно из значений углов Эйлера камеры и присваиваю его одному из значений углов Эйлера персонажа. То есть, если камера смотрит вправо и вниз, то я беру лишь то значение, которое отвечает за поворот камеры ГОРЫЗОНТАЛЬНО, от есть персонаж будет смотреть вправо, но не вниз, а туда, куда он и раньше смотреть по вертикали, но вправо. Вы поняли да? После этого, я двигаю персонада методом Move() и передаю как аргумент вектор forward трансформы персонажа. Таким образом, он должен двигатся в ту сторону, в которую смотрит его локальная ось Z, а направление оси Z я получаю через камеру, ну куда камера смотрит, туда и ось Z персонажа поворачивается. Проблема в том, что если локальная ось Z персонажа смотрит в противоположную сторону глобальной оси Z, то персонаж перестает двигатся. Но если двигать персонажа в сторону локальной оси Z таким образом Код transform.position+=transform.forward; то персонаж замечательно двигается во все стороны, НО, если на пути персонажа есть какая-то горка, то она не поднимается на нее, как это случается при использовании метода Move, а просто проходит сквозь эту горку. Расскажите же мне, пожалуйста, как заставить персонажа двигатся в нужную тебе сторону, при помощи метода Move() ?
|
|
| |
Левша | Дата: Среда, 15 Января 2014, 17:35 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| а в мануал глянуть не судьба ? CharacterController.Move
X.cor.R (Prologue)
|
|
| |
Chaz | Дата: Среда, 15 Января 2014, 18:14 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Левша, А там есть овтет на мой вопрос?
|
|
| |
robertono | Дата: Среда, 15 Января 2014, 19:50 | Сообщение # 4 |
Чокнутый Кот
Сейчас нет на сайте
| Chaz, Там есть что то большее чем ответ - тысячи ответов на другие вопросы
|
|
| |
Chaz | Дата: Среда, 15 Января 2014, 19:55 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| robertono, да ладно, может это я такой тупой, что не вижу его там, ану скажите ка мне, почему же Move не двигает перса?
|
|
| |
seaman | Дата: Среда, 15 Января 2014, 20:08 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Цитата почему же Move не двигает перса? Потому что Вы не умеете его двигать. Научитесь - будет двигаться как миленький. Вы бы хоть код привели, который у Вас не двигает его...
|
|
| |
Chaz | Дата: Среда, 15 Января 2014, 20:30 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| seaman, вот это висит на персе Код using System; using UnityEngine; using System.Collections;
public class Move : MonoBehaviour {
private Transform camera;
private Transform myTrans; private Vector3 posVect; private CharacterController controller; private Vector3 rotVect;
// Use this for initialization void Start () { camera = GameObject.FindGameObjectWithTag("Camera").transform; myTrans = transform; controller = this.gameObject.GetComponent<CharacterController>(); } // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.W)) { rotVect = myTrans.eulerAngles; rotVect.y = camera.eulerAngles.y; myTrans.eulerAngles = rotVect; Debug.Log("forward is: "+myTrans.forward); controller.Move(myTrans.forward); } if (Input.GetKey(KeyCode.S)) { rotVect = myTrans.eulerAngles; rotVect.y = camera.eulerAngles.y; myTrans.eulerAngles = rotVect; controller.Move(-myTrans.forward); } if (Input.GetKey(KeyCode.D)) { //controller.Move(); } if (Input.GetKey(KeyCode.A)) { //controller.Move(); } } } а вот это на камере Код using System; using UnityEngine; using System.Collections;
public class TPCamera : MonoBehaviour { private GameObject LookPoint; public float speedX, speedY, x, y; public bool isActivated; private Transform myTrans; private Quaternion tmpRot; private float maxDist; private Vector3 tmpPos; private float YOffset;
// Use this for initialization private void Start() { maxDist = 5; LookPoint = GameObject.FindGameObjectWithTag("LookPoint"); if (speedX == 0 && speedY == 0) speedY = speedX = 3; isActivated = false; myTrans = transform; y = myTrans.rotation.x; x = myTrans.rotation.y; tmpRot = myTrans.rotation; LookPoint.transform.rotation = Quaternion.EulerAngles(0, myTrans.rotation.y, 0); }
private void LateUpdate() {
if (Input.GetMouseButtonDown(1)) isActivated = true; if (Input.GetMouseButtonUp(1)) isActivated = false; if (isActivated) { LookPoint.transform.forward = myTrans.forward; x = Input.GetAxis("Mouse X") * speedX; y = Input.GetAxis("Mouse Y") * speedY;
myTrans.RotateAround(LookPoint.transform.position, LookPoint.transform.up, x); myTrans.RotateAround(LookPoint.transform.position, -LookPoint.transform.right, y);
myTrans.rotation = Quaternion.EulerAngles(myTrans.rotation.x, myTrans.rotation.y, 0); }
myTrans.LookAt(LookPoint.transform); YOffset = myTrans.position.y; if (Vector3.Distance(LookPoint.transform.position, myTrans.position) > maxDist) { //Debug.Log(Vector3.Distance(LookPoint.transform.position, myTrans.position)+" : "+maxDist); tmpPos = myTrans.position; tmpPos = (-myTrans.forward*maxDist) + LookPoint.transform.position; tmpPos.y = YOffset; myTrans.position = tmpPos; } } }
|
|
| |
Левша | Дата: Среда, 15 Января 2014, 21:11 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| Цитата controller.Move(-myTrans.forward); Это только направление... а скорость? Код controller.Move(moveDirection * speed * Time.deltaTime);
X.cor.R (Prologue)
Сообщение отредактировал Левша - Среда, 15 Января 2014, 21:12 |
|
| |
Chaz | Дата: Среда, 15 Января 2014, 22:30 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Левша, ну слушайте, тогда бы оно вообще не двигалось, а так оно не двигается тока при определенных условиях, написал вот так Код controller.Move(myTrans.forward*2*Time.deltaTime); - та же беда
|
|
| |
Левша | Дата: Среда, 15 Января 2014, 22:36 | Сообщение # 10 |
почти ветеран
Сейчас нет на сайте
| Может у тебя СС внутри другого колайдера помещен ? Если оно не триггер то вязнет намертво.
X.cor.R (Prologue)
Сообщение отредактировал Левша - Среда, 15 Января 2014, 22:48 |
|
| |
Chaz | Дата: Среда, 15 Января 2014, 23:22 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| Левша, вы самый гениальный человек в мире хД это ж как можно было это узнать??? я вижу проект и то не допер, а вы как провидец увидели саму суть проблемы хД так все и было, дочерним к персонажу был бокс с коллайдером, он мне был нужен, чтобы можно было нормально крутить камеру хД убрал коллайдер - и все заработало
|
|
| |