2016-10-23 6 views
0

Я использую этот код для обнаружения столкновения по сторонам, но он не работает. У меня есть Контроллер символов, прикрепленный к моим игрокам и коллайдерам на синих боксах, но он не обнаруживает столкновения, когда я сталкиваюсь с ними. https://i.stack.imgur.com/eUpOg.pngСтолкновение через контроллер символов не работает

void OnControllerColliderHit (ControllerColliderHit hit){ 

    if (controller.collisionFlags == CollisionFlags.Sides) { 

     Debug.Log (hit.gameObject.name); 
     Debug.DrawRay (hit.point, hit.normal, Color.red, 2f); 
    } 
+0

Хорошее предложение состоит в том, чтобы поместить 'Debug.Log (hit.gameObject.name);' вне инструкции if и посмотреть, есть ли у вас какой-либо журнал в целом. – Programmer

+0

Я сделал, и у меня тоже ничего не получилось. – N1ckGreek

+0

Это интересно. Можете ли вы проверить, что ваши кубы имеют коллайдеры и что их коллайдеры отключены/отключены IsTrigger? Также добавьте Rigidbody для каждого коллайдера и посмотрите, что произойдет .... – Programmer

ответ

0

Согласно документации, OnControllerColliderHit будет вызываться только в то время как Переместить выполняется. Этот шаг должен быть инициирован функцией CharacterController Move, а не напрямую изменять его свойство transform.position.

public float speed = 6.0F; 
public float jumpSpeed = 8.0F; 
public float gravity = 20.0F; 
private Vector3 moveDirection = Vector3.zero; 
CharacterController controller; 

void Start() 
{ 
    controller = GetComponent<CharacterController>(); 
} 

void Update() 
{ 
    if (controller.isGrounded) 
    { 
     moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 
     moveDirection = transform.TransformDirection(moveDirection); 
     moveDirection *= speed; 
     if (Input.GetButton("Jump")) 
      moveDirection.y = jumpSpeed; 

    } 
    moveDirection.y -= gravity * Time.deltaTime; 
    controller.Move(moveDirection * Time.deltaTime); //This is how you move 
} 

void OnControllerColliderHit(ControllerColliderHit hit) 
{ 

    if (controller.collisionFlags == CollisionFlags.Sides) 
    { 

     Debug.Log(hit.gameObject.name); 
     Debug.DrawRay(hit.point, hit.normal, Color.red, 2f); 
    } 
}