Урок на английском:
1. Добавим на сцену куб:
▶ ▶
2. Выделим его и изменим его размеры (Scale):
X = 10
Z = 10
3. Поместим на него сферу:
▶ ▶
4. По дефолту радиус сферы равен 1, поэтому поднимем её немного, чтобы она была НА нашем кубе:
▶ ▶ ▶
5. В качестве компонента добавим к сфере Rigidbody:
▶ ▶ ▶
6. Добавим к сфере скрипт Accelerometer.cs:
▶ ▶ ▶
7. Откроем его на редактирование в Visual Studio Community.
Для движения шарика (RigidBody rb) будем использовать «силу» акселерометра таким образом:
rb.AddForce(Input.acceleration);
В Unity ось Y смотрит вверх, а X и Z в в сторону и вперёд. Но на смартфоне, если его держать горизонтально, оси развернутся.
Чтобы это исправить, нужно их повернуть:
tilt = Input.acceleration;
tilt = Quaternion.Euler(90, 0, 0) * tilt;
Полный код для скрипта ниже (я немного его изменил, добавил возможность вернуть шарик на место при вертикальном положении смартфона, и перенес почти всё из Update в FixedUpdate, т.к. мы работаем с RigidBody):
using UnityEngine;
public class Accelerometer : MonoBehaviour
{
private Vector3 initialPosition;
private Quaternion initialRotation;
private Rigidbody rb;
private Vector3 tilt;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
initialPosition = transform.position;
initialRotation = transform.rotation;
}
// Update is called once per frame
void Update()
{
Debug.DrawRay(transform.position + Vector3.up, tilt, Color.cyan);
}
private void FixedUpdate()
{
tilt = Input.acceleration;
// Correct rotating value (Rotate 90 degree in X-axis)
tilt = Quaternion.Euler(90, 0, 0) * tilt;
if (Input.touchCount > 0) // Reset position (and rotation) by tap
{
transform.rotation = initialRotation;
transform.position = initialPosition;
rb.velocity = Vector3.zero; // reset rigidbody speed
}
// We will use it to move our RigidBody with rb force
rb.AddForce(tilt);
}
}
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024