gpt4 book ai didi

c# - 在 Unity 中反射(reflect)碰撞的射弹

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:43 24 4
gpt4 key购买 nike

当我发射弹丸时我会执行

private Rigidbody rigid;    

private Vector3 currentMovementDirection;

private void FixedUpdate()
{
rigid.velocity = currentMovementDirection;
}

public void InitProjectile(Vector3 startPosition, Quaternion startRotation)
{
transform.position = startPosition;
transform.rotation = startRotation;
currentMovementDirection = transform.forward;
}

我使用 InitProjectile 作为我的 Start 方法,因为我不破坏对象,我回收它并禁用渲染器。

当用射弹击中物体时,该射弹应该被反射。

我射了一堵墙,这些墙多次反射物体

Reflect

我认为Unity为此提供了一些东西

https://docs.unity3d.com/ScriptReference/Vector3.Reflect.html

当碰撞被触发

private void OnTriggerEnter(Collider other)
{
if (other.gameObject == projectile)
{
projectileComponent.ReflectProjectile(); // reflect it
}
}

我想用它来体现

public void ReflectProjectile()
{
// Vector3.Reflect(... , ...);
}

但是我必须使用什么作为 Reflect 的参数?看来我必须旋转弹丸才能改变它的运动方向。

最佳答案

为了反射(reflect)弹丸操纵刚体的速度。在这个例子中,我使用一个立方体(上面有这个脚本)作为抛射物,一些立方体围绕着它。

没有对撞机被标记为触发器。这是它的样子:https://youtu.be/2Lfj-li6x8M

public class testvelocity : MonoBehaviour
{
private Rigidbody _rb;
private Vector3 _velocity;

// Use this for initialization
void Start()
{
_rb = this.GetComponent<Rigidbody>();

_velocity = new Vector3(3f, 4f, 0f);
_rb.AddForce(_velocity, ForceMode.VelocityChange);
}

void OnCollisionEnter(Collision collision){
ReflectProjectile(_rb, collision.contacts[0].normal);
}

private void ReflectProjectile(Rigidbody rb, Vector3 reflectVector)
{
_velocity = Vector3.Reflect(_velocity, reflectVector);
_rb.velocity = _velocity;
}
}

关于c# - 在 Unity 中反射(reflect)碰撞的射弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49790711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com