Unity3D与角色控制器碰撞

时间:2016-02-13 13:26:25

标签: unity3d

我是团结的新手,我试图成为一个无尽的跑步者。当我的球员(球)击中其中一面墙时,游戏需要走向现场:LostMenu。我的问题是碰撞不起作用。碰撞时没有任何事情发生......以下是玩家和墙壁上的检查员:墙壁http://prntscr.com/a2pgzm玩家http://prntscr.com/a2ph66

墙上的碰撞脚本:

using UnityEngine;
using System.Collections;

public class LostByWallCSR : MonoBehaviour
{
    void OnCollisionEnter (Collision col)
    {
        if(col.gameObject.name == "Player")
        {
             Application.LoadLevel("LostMenu");
             Debug.Log ("WORKS!");
        }
   }
}

播放器上的移动脚本:

using UnityEngine;
using System.Collections;

public class CharacterControllerz : MonoBehaviour {

public float speed = 5f;
public float gravity = 20f;
private Vector3 moveDirections = new Vector3();
private Vector3 inputs = new Vector3();

void FixedUpdate()
{
    CharacterController cc = GetComponent<CharacterController>();
    if (cc.isGrounded) 
    {
        if (Input.GetKey("left"))
            inputs.z = 3;
        else if (Input.GetKey("right"))
            inputs.z = -3;
        else
            inputs.z = 0;

        moveDirections = transform.TransformDirection(inputs.x, 0, inputs.z) * speed;                    
    }

    inputs.x = 5;
    moveDirections.y = inputs.y - gravity;
    cc.Move(moveDirections * Time.deltaTime);
}
}

有关如何正确设置碰撞的任何想法?附加一个rigibody没有帮助它。除非我遗漏某些事情。

2 个答案:

答案 0 :(得分:0)

确保两个对象都有一个对撞组件。

您需要将刚体组件附加到其中一个对象上。(如果您没有附加刚体,它将无效)

您的球体对撞机是触发器,将其删除或将您的功能更改为

public void OnTriggerEnter(Collider other)
    {

    }

答案 1 :(得分:0)

您需要使用 OnControllerColliderHit 方法

private void OnControllerColliderHit(ControllerColliderHit hit)
{
    if (hit.gameObject.CompareTag("Trap"))
    {
        Debug.Log("colisiono with trap");
        playerDentro = true;
    }
    else
    {
        if (!hit.gameObject.CompareTag("Trap"))
        {
            Debug.Log("player salio de la trampa");
            playerDentro = false;
        }
    }
}e