Я строю 3D-лабиринт, который перемещается игроком.Я выбираю «лабиринтный» подход, и мне нужно будет маневрировать маленьким шариком по лабиринту, когда игрок перемещает лабиринт.Проблема возникает, когда игрок перемещает стенку, на которой в данный момент находится шар, в направлении мяча.Мяч проходит через стену и останавливается на следующей доступной стене.
Лабиринт использует сетчатый коллайдер и твердое тело, а шар - сферический коллайдер.
Я резко увеличил частоту кадров физики.но безрезультатно.Учитывая сложность лабиринта и потенциально большое количество комбинаций лабиринта, я действительно не хочу прикреплять простые коллайдеры к каждой стене.Будем благодарны за любые советы, подсказки, предложения, комментарии и т. Д.
Сценарий шара для непрерывного вращения:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ballGravity : MonoBehaviour {
public Rigidbody m_Rigidbody;
public Vector3 m_EulerAngleVelocity;
// Use this for initialization
void Start () {
m_EulerAngleVelocity = new Vector3 (0, 100, 0);
m_Rigidbody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void FixedUpdate () {
Quaternion deltaRotation = Quaternion.Euler (m_EulerAngleVelocity * Time.deltaTime);
m_Rigidbody.MoveRotation (m_Rigidbody.rotation * deltaRotation);
}
}
Сценарий вращения лабиринта:
using UnityEngine;
using System.Collections;
public class rotObj : MonoBehaviour
{
private float baseAngle = 0.0f;
float rotSpeed = 10;
void OnMouseDown(){
Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
pos = Input.mousePosition - pos;
baseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg;
baseAngle -= Mathf.Atan2(transform.right.y, transform.right.x) *Mathf.Rad2Deg;
}
void OnMouseDrag(){
//float rotY = Input.GetAxis("Vertical")*rotSpeed*Mathf.Deg2Rad;
//gm.transform.Rotate(Vector3.right, rotY);
Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
pos = Input.mousePosition - pos;
float ang = Mathf.Atan2(pos.y, pos.x) *Mathf.Rad2Deg - baseAngle;
transform.rotation = Quaternion.AngleAxis(ang, Vector3.forward);
}
}