如何找到弹药击中表面的正常角度?还有一个更大的问题,如何对冲压能力进行线性变化。一个子弹取决于这个角度?也就是说,在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;
}
}}
答案 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的反转)