首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黑洞物理( 2D )

黑洞物理( 2D )
EN

Stack Overflow用户
提问于 2022-05-31 03:13:44
回答 1查看 229关注 0票数 1

我试图有一个黑洞,就像物理一样,它会吸引任何物体靠近它,然后把它放到黑洞轨道上,就像一个漩涡,让它转到中心然后消失。

我最终得到了这样的东西,但不起作用

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[DisallowMultipleComponent]
[ExecuteInEditMode]
[RequireComponent(typeof(CircleCollider2D))]
[RequireComponent(typeof(SpriteRenderer))]
public class BlackHole : MonoBehaviour
{    
    /// <summary>  </summary>
    public const float          GRAVITY_PULL    = 7000.0f;
    /// <summary>  </summary>
    private const float         SWIRLSTRENGTH   = 5f;

    // ------------------------------------------------
    /// <summary>  </summary>
    private float               _gravityRadius  = 7.0f;    
    /// <summary>  </summary>
    private List<Rigidbody2D>   _rigidBodies    = new List<Rigidbody2D>();
    // ------------------------------------------------

#if UNITY_EDITOR     
    void Update()
    {
        if( Application.isPlaying == false )
        {
            _gravityRadius = 
                GetComponent<CircleCollider2D>().radius;
        }
    }
#endif 

    private void LateUpdate()
    {    
        UpdateBlackHole();
    }


    /// <summary>
    /// Attract objects towards an area when they come within the bounds of a collider.
    /// This function is on the physics timer so it won't necessarily run every frame.
    /// </summary>
    /// <param name="in_other">Any object within reach of gravity's collider</param>
    void OnTriggerEnter2D(
        Collider2D in_other
    )
    {
        if ( in_other.attachedRigidbody != null 
            && _rigidBodies != null )
        {                
            //to get them nice and swirly, use the perpendicular to the direction to the vortex
            Vector3 direction = 
                    transform.position - in_other.attachedRigidbody.transform.position;
            var tangent = 
                    Vector3.Cross(direction, Vector3.forward).normalized * SWIRLSTRENGTH;

            in_other.attachedRigidbody.velocity = 
                                            tangent;            
            _rigidBodies.Add( in_other.attachedRigidbody );
        }
    }

    private void UpdateBlackHole()
    {
        if( _rigidBodies != null )
        {
            for (int i = 0; i < _rigidBodies.Count; i++)
            {
                if( _rigidBodies[i] != null )
                {
                    CalculateMovement( _rigidBodies[i] );
                }
            }
        }
    }

    

    private void CalculateMovement(
        Rigidbody2D in_rb
    )
    {
        float distance = 
                Vector3.Distance(
                                transform.position, 
                                in_rb.transform.position
                            ); 

        float gravityIntensity = 
                        distance
                            / _gravityRadius;

        in_rb.AddForce(
                (transform.position - in_rb.transform.position) 
                                                        * gravityIntensity 
                                                                * in_rb.mass   
                                                                        * GRAVITY_PULL 
                                                                                * Time.deltaTime);
        
        in_rb.drag += 0.0001f;
        
        Debug.DrawRay(
                in_rb.transform.position, 
                transform.position - in_rb.transform.position
                );


        if( distance <= 0.1f )
        {
            _rigidBodies.Remove( in_rb );

            Destroy( in_rb.gameObject );
        }
    }
}

这会使物体从黑洞的中心上下移动,并提高它的速度,这是我想要的,但是为了上下,我想让它绕着它运行,然后在时间里接近黑洞的中心。

有什么帮助吗?

更新1:通过在开始时增加一个小力,我能够使它在黑洞周围旋转,但它不会掉到黑洞的中心。

更新2:通过添加一些拖动来解决这个问题,如果有人试图实现同样的目标,请随意使用此脚本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-31 03:23:28

你需要给物体一些启动力,因为它会给出水平速度,并形成一个轨道。为了使它向内螺旋,使开始力非常小,它会以一定的水平速度向黑洞下降。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72441886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档