统一。角度正常。线性变化"冲压能力"

时间:2018-03-30 19:48:19

标签: c# .net unity3d linear-algebra trigonometry

如何找到弹药击中表面的正常角度?还有一个更大的问题,如何对冲压能力进行线性变化。一个子弹取决于这个角度?也就是说,在45度的角度下,子弹失去了一半的冲击能力"?乘以标准三角函数是没有意义的,因为它们都是非线性的。求助,因为我根本不懂三角学......

我唯一可以找到的东西是击中表面的法线。 enter image description here

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
public float BulletImpulse { get; private set; }
public Rigidbody BulletRigidbody { get; private set; }

void Start()
{
    BulletImpulse = 3f;
    BulletRigidbody = GetComponent<Rigidbody>();
    BulletRigidbody.AddForce(transform.up * BulletImpulse, ForceMode.Impulse);
    BulletRigidbody.AddTorque(-transform.up * BulletImpulse, ForceMode.Impulse);
}

void OnCollisionEnter(Collision collision)
{
    foreach (var item in collision.contacts)
    {
        Debug.DrawLine(item.point, item.point + item.normal, Color.green, 100, false);
        break;
    }
}}

1 个答案:

答案 0 :(得分:1)

要获得角度,您将需要子弹的方向,这将是撞击时速度的标准化方向,以及撞击点处法线的方向。然后,您可以使用Vector3.angle()来获取两者之间的角度,并将其乘以影响因子以获得结果。

void OnCollisionEnter(Collision collision)
{
   Vector3 bulletDir = collision.getComponent<Rigidbody>().velocity.normalized;
   Vector3 collNormal = collision.contacts[0].normal;
   float angle = Vector3.angle(collNormal, bulletDir);

   float impactFactor = 1 - angle/90f; // impact on a scale from 0-1;
}

(您可能需要使用bulletDir的反转)