所以上周我一直在为此苦苦挣扎。首先,我目前正在开发一个 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 直到现在还没有工作(或者至少在我以前的任何计算中都没有),现在我遇到了一个障碍,我想不出要尝试的新事物,所以我非常希望有一个你们中的一些人知道如何以某种方式设法做到这一点。

已经谢谢了!

最佳答案

我刚刚找到了我自己问题的答案(终于)。

对于任何感兴趣的人,这里是新代码:

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;

}

关于c# - 物体撞击墙壁后从墙上反射出来,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30490114/

10-09 05:49