一旦撞到墙壁,就会将物体从墙上反射出来

时间:2015-05-27 18:12:42

标签: c# unity3d rotation

所以我上周一直在努力解决这个问题。首先,我正在开发一个Unity项目,这是我坚持的代码:

private RaycastHit hit;
private Ray cast;

private bool casthit;

void Start() {

    casthit = false;
    Ray cast = new Ray(transform.position, transform.forward);

}

void OnTriggerEnter(Collider other){

    if (other.tag == "Enemy") {

        other.GetComponent<BasicEnemy>().setHealthLower(damage);

    }

    if (other.tag != "Turret" && other.tag != "Bullet") {

        //here is where we want to reflect this object

    }


}

void Update () {

    Ray cast = new Ray(transform.position, transform.forward);

    Physics.Raycast (cast, out hit);

    transform.position += transform.forward * speed * Time.deltaTime;

}

基本上发生的事情是我有一个投射子弹的炮塔,当其中一个子弹击中墙壁时,我希望它能从墙壁上反射出来(如果您更喜欢这个术语,则可以从墙上反弹)。墙壁的反射应该与光从表面反射的方式相同。现在的问题主要在于我不知道这些东西是如何工作的,特别是因为我基本上需要以某种方式计算子弹朝向的角度(所以我只能给变换一个y值,这样它就会继续前往下一个方向。

正如你所看到的,我已经有了一些基于光线投射和命中射线形式的基础(因为我相信我们需要点击射线在一点上正常)。

可悲的是,我只是不明白从哪里开始计算,甚至不知道我需要做什么样的计算。通常Vector3.reflect到目前为止还没有工作(或者至少在我之前的任何计算中都没有),到现在为止我遇到了一个路障,我无法想到新事物。尝试,所以我非常希望你们中的一个人知道怎么设法做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:0)

我刚刚找到了自己问题的答案(最后)。

对于任何感兴趣的人都是新代码:

void OnTriggerEnter(Collider other){

    if (other.tag == "Enemy") {

        other.GetComponent<BasicEnemy>().setHealthLower(damage);

    }

    if (other.tag != "Turret" && other.tag != "Bullet") {

        Vector3 reflectposition = -2 * (Vector3.Dot(transform.position, hit.normal) * hit.normal - transform.position);
        reflectposition.y = this.transform.position.y;
        this.transform.LookAt(reflectposition);


    }


}

void Update () {

    Ray cast = new Ray(transform.position, transform.forward);

    Physics.Raycast (cast, out hit);

    transform.position += transform.forward * speed * Time.deltaTime;

}