簡體   English   中英

統一。 與法線的角度。 “打孔能力”的線性變化

[英]Unity. Angle to the normal. Linear change of “punching capacity”

如何找到子彈撞擊表面的法線角度? 還有一個更大的問題,如何根據該角度線性改變子彈的“打孔能力”? 也就是說,子彈以45度角失去了一半的“打孔能力”? 用標准三角函數相乘是沒有意義的,因為它們都是非線性的。 請幫助,因為我根本不了解三角函數...

我現在能找到的唯一東西是擊球表面的法線。 在此處輸入圖片說明

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的反函數)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM