Создание управление по типу игры Ballz

115
24 апреля 2021, 20:10

Что же я прошу от вас(любому из этих пунктов я буду рад):
1)Скинуть видео урок или гайд как сделать такое управление
2)Дать ссылки на материал который поможет мне это сделать (не весь юнити мануал)
3)Дать любую подсказку
4)Если существует название для такого типа управления , то я рад буду его
узнать.

//Одно из видео в интернете (геймплей)
https://www.youtube.com/watch?v=PafegklOju8
Ну и фото

Answer 1

Вот вам основная часть скрипта. Остальное допишите сам. Не трогайте скрипт, если не разбирайтесь в высшем математике!

Работоспособность

Скрипт

Внимание: Этот скрипт вы должны ставить на мяча.

public class Control : MonoBehaviour
{
    public float force;
    float distance, rotation, rotationRadian;
    bool canGo;
    public GameObject Ball, LeftWall, TopWall, RightWall;
    private void Start()
    {
        canGo = false;
    }
    private void Update()
    {
        Drop();
    }
    void Drop()
    {
        if (Input.GetMouseButtonUp(0))
        {
            Vector2 pressedPosition = Input.mousePosition;
            Vector2 center = Ball.transform.position;
            Vector2 pressedVector = new Vector2(pressedPosition.x - center.x, pressedPosition.y - center.y);
            distance = Mathf.Sqrt
            (
                Mathf.Pow(pressedVector.x, 2) + Mathf.Pow(pressedVector.y, 2)
            );
            Vector2 verticalVector = new Vector2(0, distance);
            rotationRadian = Mathf.Acos
            (
                (verticalVector.x * pressedVector.x + verticalVector.y * pressedVector.y) /
                Mathf.Sqrt
                (
                    (Mathf.Pow(verticalVector.x, 2) + Mathf.Pow(verticalVector.y, 2)) *
                    (Mathf.Pow(pressedVector.x, 2) + Mathf.Pow(pressedVector.y, 2))
                )
            );
            rotation = -rotationRadian * Mathf.Rad2Deg;
            if (pressedPosition.x < center.x)
            {
                rotation = 360.0f - rotation;
                rotationRadian = 2 * Mathf.PI - rotationRadian;
            }
            Ball.transform.eulerAngles = new Vector3(0.0f, 0.0f, rotation);
            canGo = true;
        }
        if (canGo)
        {
            Ball.transform.position = new Vector2
            (
                Ball.transform.position.x + force * Mathf.Sin(rotationRadian),
                Ball.transform.position.y + force * Mathf.Cos(rotationRadian)
            );
        }
    }
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject == LeftWall || other.gameObject == RightWall)
        {
            rotation = - rotation;
            rotationRadian = - rotationRadian;
            Ball.transform.eulerAngles = - Ball.transform.eulerAngles;
        }
        if (other.gameObject == TopWall)
        {
            rotation = 180.0f - rotation;
            rotationRadian = Mathf.PI - rotationRadian;
            Ball.transform.eulerAngles = new Vector3(0.0f, 0.0f, 180.0f) - Ball.transform.eulerAngles;
        }
    }
}
Окно Inspector
  1. У мяча -

  1. У стен -

READ ALSO
Как создать DynamicMethod из IL-кода?

Как создать DynamicMethod из IL-кода?

мне необходимо создать DynamicMethod по IL-коду следующего метода:

137
Добавление объектов в CollectionView внутри ObservableCollection

Добавление объектов в CollectionView внутри ObservableCollection

Не могу добавить объект в CollectionView, которая находится внутри объекта, который находится в ObservableCollectionМного прошерстил интернетов, натыкался...

133
Как использовать ключ RSA в AES шифрование?

Как использовать ключ RSA в AES шифрование?

Никак не могу сообразить как мне правильно сделать реализацию чтобы впихнуть ключ RSA 2048 в шифрование AES

89
Ошибка в запросе SQL (MySql 8.0.17) | C#

Ошибка в запросе SQL (MySql 8.0.17) | C#

Я пытаюсь сделать SELECT * FROM member WHERE id = 627528083 запрос к базе данных, но мне выдаёт ошибку синтаксиса в строке 41, почему?

79