所以我上周一直在努力解决这个问题。首先,我正在开发一个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
到目前为止还没有工作(或者至少在我之前的任何计算中都没有),到现在为止我遇到了一个路障,我无法想到新事物。尝试,所以我非常希望你们中的一个人知道怎么设法做到这一点。
谢谢!
答案 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;
}