Как реализоватьУправление шариком?

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

Как реализоватьУправление шариком?

Сообщение gind 12 май 2012, 13:38

Задача такова: Нужно, чтобы шарик управлялся по input обычно, НО надо,чтобы он при нажатии влево вправо Некрутился, а именно летел в ту сторону И при этом вращался ( в какую сторону катишь шарик туда он и должен катится)
Чем шире угол зрения - тем он тупее.

Изображение
Аватара пользователя
gind
UNец
 
Сообщения: 30
Зарегистрирован: 01 май 2012, 16:42
  • Сайт
  • ICQ

Re: Как реализоватьУправление шариком?

Сообщение waruiyume 12 май 2012, 14:06

Кинуть на сферу,назначить камеру в переменную "cam", добавить Rigidbody, запретить у Rigidbody вращения по всем осям и снять галочку с "использовать гравитацию".
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    private Vector3 inp;
    private Vector3 delta;
    private Vector3 oldPos;
    private const float pi2 = Mathf.PI * Mathf.PI;

    public float diam = 2f;

    public float speed = 10f;

    public Transform cam;

        // Use this for initialization
        void Start ()
        {
            oldPos = transform.position;
        }
       
        // Update is called once per frame
        void Update ()
        {
            inp.x = Input.GetAxis("Horizontal");
            inp.z = Input.GetAxis("Vertical");
        }

    void FixedUpdate()
    {
        Vector3 cp = transform.position - cam.position;
        cp.y = 0f;
        transform.Translate(Quaternion.LookRotation(cp) * inp * speed * Time.deltaTime, Space.World);
        delta = oldPos - transform.position;

        float ang = Mathf.Sin(delta.magnitude / diam / pi2) * Mathf.Rad2Deg;
        transform.RotateAround(Vector3.Cross(delta, Vector3.up), ang);
        oldPos = transform.position;
    }
}
 
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как реализоватьУправление шариком?

Сообщение gind 12 май 2012, 14:09

Спасибо! Input.GetAxis("Horizontal"); Если поставить игру на дройда или айфон, то там будет уже g-сенсор выполнять эту функцию?
Чем шире угол зрения - тем он тупее.

Изображение
Аватара пользователя
gind
UNец
 
Сообщения: 30
Зарегистрирован: 01 май 2012, 16:42
  • Сайт
  • ICQ

Re: Как реализоватьУправление шариком?

Сообщение waruiyume 12 май 2012, 14:22

Вроде нет, это будет.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как реализоватьУправление шариком?

Сообщение gind 12 май 2012, 14:38

Есть проблема, Во-первых, как я понял сначала публичная переменная cam туда надо вставлять камеру, но с ней все не так, как надо, вставил шарик туда -все норм!Во-вторых, немного покатавшись я заметил, что когда отпускаю клавиши он катится куда то,т.е. катаюсь все норм, потом бац, например после долгой попытки проехать шариком сквозь коллайдер, я уезжаю и останавливаюсь, после этого его катит в какую то сторону.В чем дело?
Чем шире угол зрения - тем он тупее.

Изображение
Аватара пользователя
gind
UNец
 
Сообщения: 30
Зарегистрирован: 01 май 2012, 16:42
  • Сайт
  • ICQ

Re: Как реализоватьУправление шариком?

Сообщение waruiyume 12 май 2012, 15:13

Можно вместо Rigidbody использовать CharacterController, тогда не будет изменений скорости, после вытеснения из коллайдера.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    private Vector3 inp;
    private Vector3 delta;
    private Vector3 oldPos;
    private const float pi2 = Mathf.PI * Mathf.PI;

    public float diam = 2f;

    public float speed = 10f;

    public Transform cam;

    private CharacterController controller;

    // Use this for initialization
    void Start()
    {
        oldPos = transform.position;
        controller = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        inp.x = Input.GetAxis("Horizontal");
        inp.z = Input.GetAxis("Vertical");
    }

    void FixedUpdate()
    {
        Vector3 cp = transform.position - cam.position;
        cp.y = 0f;
        controller.Move(Quaternion.LookRotation(cp) * inp * speed * Time.deltaTime);
        delta = oldPos - transform.position;

        float ang = Mathf.Sin(delta.magnitude / diam / pi2) * Mathf.Rad2Deg;
        transform.RotateAround(Vector3.Cross(delta, Vector3.up), ang);
        oldPos = transform.position;
    }
}


 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как реализоватьУправление шариком?

Сообщение gind 12 май 2012, 16:54

Ещё вопрос, как создавить камеру следить за шариком,т.е. так же перемещаться как и он, но не вращаться,как шар и при столкновении шарика с каким нибудь препятствием не перемещаться дальше ???
Чем шире угол зрения - тем он тупее.

Изображение
Аватара пользователя
gind
UNец
 
Сообщения: 30
Зарегистрирован: 01 май 2012, 16:42
  • Сайт
  • ICQ


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24