统一。与法线的角度。 "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 的倒数)
如何找到子弹击中表面时与法线的角度?还有一个更大的问题,如何根据这个角度对子弹的 "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 的倒数)