Тряска камеры при хотьбе

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Тряска камеры при хотьбе

Сообщение Ivan_Studio 24 апр 2017, 15:14

Здраствуйте. Я уже который раз пытаюсь сделать так чтобы камера не тряслась при прикосновении со стенами. Если идти ровно прямо или вправо,лево,назад , тряски не происходит. Но если идти коса , то луч не улавливает стены.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlayerCcontrolol : MonoBehaviour {

        public GameObject pplayer;
        public int speed = 6;
        public float xrotation;
        public float yrotation;
        public GameObject camera1;
        public Rigidbody rb;
        public float zirow;
        public bool jump = true;
        public Vector3 lf;
        public Vector3 rht;
        public Vector3 beh;
        public Vector3 fw;
        public Vector3 du;

        void OnCollisionEnter(Collision Col) {
                        jump = true;
        }


        void Start() {

                rb = GetComponent<Rigidbody>();
        }



        // Update is called once per frame
        void Update () {
                lf = transform.TransformDirection(Vector3.left);
                rht = transform.TransformDirection(Vector3.right);
                beh = transform.TransformDirection(Vector3.back);
                fw = transform.TransformDirection(Vector3.forward);
                du = transform.TransformDirection(Vector3.down);
                xrotation = camera1.GetComponent<CameraControll>().yRotation;
                yrotation = camera1.GetComponent<CameraControll>().xRotation;
                gameObject.transform.eulerAngles = new Vector3(0,xrotation,0);
                pplayer.transform.eulerAngles = new Vector3(0/*yrotation*/,xrotation,0);


                if (Input.GetKey(KeyCode.W)&&!Physics.Raycast(transform.position,fw,1F) )
                {
                        gameObject.transform.position += gameObject.transform.forward * speed * Time.deltaTime;
                }

                if (Input.GetKey(KeyCode.S)&&!Physics.Raycast(transform.position,beh,1F))
                {
                        gameObject.transform.position -= gameObject.transform.forward * speed * Time.deltaTime;
                }

                if (Input.GetKey(KeyCode.A)&&!Physics.Raycast(transform.position,lf,1F))
                {
                        gameObject.transform.position -= gameObject.transform.right * speed * Time.deltaTime;
                }
                if (Input.GetKey(KeyCode.D)&&!Physics.Raycast(transform.position,rht,1F))
                {
                        gameObject.transform.position += gameObject.transform.right * speed * Time.deltaTime;
                }
                if (Input.GetKeyDown(KeyCode.Space))
                {
                        if (Physics.Raycast(transform.position,du,1.7F)){
                        rb.AddForce(0,8,0, ForceMode.Impulse);
                                jump = false;
                        }
                               
                }
        }


}
 

Помогите пожалуйста
Ivan_Studio
UNец
 
Сообщения: 23
Зарегистрирован: 15 дек 2016, 19:12

Re: Тряска камеры при хотьбе

Сообщение Tolking 24 апр 2017, 16:03

Либо ригидбоди сними, либо двигай через ригидбоди камеру...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Тряска камеры при хотьбе

Сообщение Ivan_Studio 24 апр 2017, 20:32

всмысле двигать камеру с ригедбоди?
Ivan_Studio
UNец
 
Сообщения: 23
Зарегистрирован: 15 дек 2016, 19:12

Re: Тряска камеры при хотьбе

Сообщение Tolking 25 апр 2017, 01:17

Ты постоянно телепортиш твердый объект в стену. Как физический движек должен отобразить это? Двигай физический объект через физический движек, а не на прямую трансформу позицию меняй...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Тряска камеры при хотьбе

Сообщение Ivan_Studio 25 апр 2017, 16:38

Нашел функцию Rigidbody.MovePosition. не могу понять почему я раньше её не нашел , спасибо.
Ivan_Studio
UNец
 
Сообщения: 23
Зарегистрирован: 15 дек 2016, 19:12

Re: Тряска камеры при хотьбе

Сообщение Ivan_Studio 26 апр 2017, 17:41

Теперь при столкновении со стеной персонаж начинает скользить по стене как в Mirror's Edge. И оторвать его не получаеться. через несколько (1-2) секунды он падает напол.
Скрипт с модифигациями:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlayerCcontrolol : MonoBehaviour {

        public GameObject pplayer;
        public float speed = 6;
        public float xrotation;
        public float yrotation;
        public GameObject camera1;
        public Rigidbody rb;
        public float zirow;
        public bool jump = true;
        public Vector3 lf;
        public Vector3 rht;
        public Vector3 beh;
        public Vector3 fw;
        public Vector3 du;
        static float time;

        void OnCollisionEnter(Collision Col) {
                        jump = true;
        }


        void Start() {

                rb = GetComponent<Rigidbody>();
        }



        // Update is called once per frame
        void Update () {
                lf = transform.TransformDirection(Vector3.left);
                rht = transform.TransformDirection(Vector3.right);
                beh = transform.TransformDirection(Vector3.back);
                fw = transform.TransformDirection(Vector3.forward);
                du = transform.TransformDirection(Vector3.down);
                xrotation = camera1.GetComponent<CameraControll>().yRotation;
                yrotation = camera1.GetComponent<CameraControll>().xRotation;
                gameObject.transform.eulerAngles = new Vector3(0,xrotation,0);
                pplayer.transform.eulerAngles = new Vector3(0/*yrotation*/,xrotation,0);


                if (Input.GetKey(KeyCode.W)/*&&!Physics.Raycast(transform.position,fw,1F)*/&&!Input.GetKey(KeyCode.A)&&!Input.GetKey(KeyCode.D)&&!Input.GetKey(KeyCode.S) )
                {
                        rb.MovePosition(transform.position + transform.forward * speed);
                }

                if (Input.GetKey(KeyCode.S)/*&&!Physics.Raycast(transform.position,beh,1F)*/&&!Input.GetKey(KeyCode.A)&&!Input.GetKey(KeyCode.D)&&!Input.GetKey(KeyCode.W))
                {
                        rb.MovePosition(transform.position - transform.forward * speed);
                }

                if (Input.GetKey(KeyCode.A)/*&&!Physics.Raycast(transform.position,lf,1F)*/&&!Input.GetKey(KeyCode.W)&&!Input.GetKey(KeyCode.D)&&!Input.GetKey(KeyCode.S))
                {
                        rb.MovePosition(transform.position - transform.right * speed);
                }
                if (Input.GetKey(KeyCode.D)/*&&!Physics.Raycast(transform.position,rht,1F)*/&&!Input.GetKey(KeyCode.A)&&!Input.GetKey(KeyCode.W)&&!Input.GetKey(KeyCode.S))
                {
                        rb.MovePosition(transform.position + transform.right * speed);
                }
                if (Input.GetKey(KeyCode.A)&&Input.GetKey(KeyCode.W)&&!Input.GetKey(KeyCode.D)&&!Input.GetKey(KeyCode.S)){
                        rb.MovePosition(transform.position - (transform.right - transform.forward) * speed);
                }
                if (Input.GetKey(KeyCode.D)&&Input.GetKey(KeyCode.W)&&!Input.GetKey(KeyCode.A)&&!Input.GetKey(KeyCode.S)){
                        rb.MovePosition(transform.position + (transform.right + transform.forward) * speed);
                }
                if (Input.GetKey(KeyCode.A)&&Input.GetKey(KeyCode.S)&&!Input.GetKey(KeyCode.D)&&!Input.GetKey(KeyCode.W)){
                        rb.MovePosition(transform.position - (transform.right + transform.forward) * speed);
                }
                if (Input.GetKey(KeyCode.D)&&Input.GetKey(KeyCode.S)&&!Input.GetKey(KeyCode.A)&&!Input.GetKey(KeyCode.W)){
                        rb.MovePosition(transform.position + (transform.right - transform.forward) * speed);
                }
                if(jump==false){ //смещает игрока вниз если персонаж в воздухе более 0.5 секунд
                        print(Time.time+" "+time);
                        if(Physics.Raycast(transform.position,du,1.7F))
                                jump=true;
                        if((Time.time-time)>0.5F){
                                jump=true;
                                print("k");
                                gameObject.transform.position = new Vector3(0,-1,0); //при "скольжении" не срабатывает
                        }
                }
                else
                        time = Time.time;
                if (Input.GetKeyDown(KeyCode.Space))
                {
                        if (jump==true){
                        rb.AddForce(0,8,0, ForceMode.Impulse);
                                jump = false;
                        }
                               
                }
        }


}
 
Ivan_Studio
UNец
 
Сообщения: 23
Зарегистрирован: 15 дек 2016, 19:12

Re: Тряска камеры при хотьбе

Сообщение Tolking 26 апр 2017, 17:55

Либо ригидбоди сними, либо двигай через ригидбоди...

Если начал использовать физику используй физику!!! Смешивать физику и движение через трансформ - это постоянно попадать на глюки... На использование ригидбоди на персонаже должно иметь веские аргументы... На персонажи, обычно, физика не действует, или действует иначе...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Тряска камеры при хотьбе

Сообщение Ivan_Studio 30 апр 2017, 11:35

дык я уже не двигаю через transform , все делаю через rigedbody.position , еслио отключу ригедбоди , то скрипт уже работать не будет
Ivan_Studio
UNец
 
Сообщения: 23
Зарегистрирован: 15 дек 2016, 19:12


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 21