2016-10-23 5 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'がディスエーブルまたはチェックされていないことを確認できますか?また、各ColliderにRigidbodyを追加し、何が起こるかを確認してください。 – Programmer

答えて

0

移動が行われている間にドキュメントによれば、OnControllerColliderHitのみ呼び出されます。その移動は、transform.positionプロパティを直接変更するのではなく、CharacterControllerのMove関数によって開始されなければなりません。

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); 
    } 
} 
関連する問題