统一。与法线的角度。 "punching capacity" 的线性变化

Unity. Angle to the normal. Linear change of "punching capacity"

如何找到子弹击中表面时与法线的角度?还有一个更大的问题,如何根据这个角度对子弹的 "punching capacity" 进行线性变化?也就是,让45度角的子弹,丢了一半"punching ability"?乘以标准三角函数是没有意义的,因为它们都是非线性的。请帮忙,因为我根本不懂三角学...

我现在能找到的唯一东西是命中表面的法线。 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;
    }
}}

要获得角度,您需要子弹的方向,即撞击速度的归一化方向,以及撞击点的法线方向。然后,您可以使用 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 的倒数)