Hola! estoy programando un personaje que rote alrededor de un objeto,lo he conseguido con el rotate.Around,el problema es que no colisiona y me gustaria saber como lo hariais(por favor no me digais que añadiendo un box collider que no funciona).Mi idea es hacer la colision como el simple.Move,y he visto algo sobre una funcion llamada Quartenion pero no la entiendo muy bien,si alguien puede decirme lo que sea lo agradeceria.
Hola!!!
No entiendo bien que es lo que quieres hacer, pero creo que quieres hacer que un objeto rote alrededor de otro y que este tenga colisiones con otros objetos correcto?
De ser asi el Box Collider deberia funcionar si o si pues esta diseñado para eso, ve si en las opciones no tienes marcado el tick de "Is Trigger" porque esto podria afectar, tambien revisa si el objeto con el que quieres que colisione tiene un Collider tambien.
Espero ayude.
Chau.
Aquí tienes la tabla de colisiones, que no detecte las colisiones puede depender de varias cosas, una de ellas es que el personaje no tenga un rigidbody.
(//<fileStore.core_Attachment>/monthly_2016_10/CollisionTable.png.074eb3fc285d147529682f9e0b8390fd.png)
tu personaje es un rigidbody? es kinamatico? es un charactercontroller? que metodo usas para moverlo? se puede acercar/alejar del centro? puede rotar sobre si mismo? describilo mas por favor.
Con el move o el simple (en charactercontroller) tenes que arreglartelas con el vector de movimiento, pero si lo haces ya esta, basicamente colisiona con cualquier cosa que tenga collider. Con un rigidbody tenes que aplicar fuerzas o modificar el vector velocity, el rotate around modifica el transform directamente, las fisicas + modificar transform provocan cosas raras, nunca se deben mezclar.
Si lo haces con el metodo del Move podes hacer asi, seguramente hay existe mejor:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class rotAround : MonoBehaviour {
public Transform centro; //objeto vacio
public float speed = 3;
private Vector3 prox;
private Vector3 move;
private Vector3 gravity;
void Start () {
gravity = Physics.gravity;
}
void Update () {
centro.LookAt( transform.position );
move = Vector3.zero;
prox = Vector3.zero;
//moverse alrededor
if (Input.GetKey (KeyCode.W)) {
move = speed * centro.right;
} else if (Input.GetKey (KeyCode.S)){
move = -speed * centro.right;
}
//alejarse/acercarse
if (Input.GetKey (KeyCode.UpArrow)) {
prox = speed * centro.forward;
} else if (Input.GetKey (KeyCode.DownArrow)){
prox = -speed * centro.forward;
}
GetComponent<CharacterController> ().Move ((prox + move + gravity) * Time.deltaTime);
}
}
Si esto se lo pones a un objeto y le pasas el "centro" se mueve alrededor colisionando con cualquier cosa que tenga collider, podes modificarlo para que gire, para mire siempre en la direccion de movimiento, o hacia el centro (tipico de boss fight), etc.