C# 特定对象的单位重力取决于标记

C# 特定对象的单位重力取决于标记,c#,unity3d,tags,gravity,C#,Unity3d,Tags,Gravity,我有个问题。我正在做一个很大程度上取决于重力的游戏。现在我想让玩家对象对其他具有特定标记的对象具有重力。这是一个2d游戏。我怎样才能给球员这种重力?我更喜欢c#脚本,但java也不错 谢谢你的帮助 使用FixedUpdate方法创建脚本,并在此方法中计算和应用刚体力 用于计算脚本中的重力强度。在脚本的循环中,计算每个单独的重力向量,然后求和为最终的重力向量,这是游戏对象将被拉向的方向 例如(C#): //将此脚本附加到将受重力影响的游戏对象 //确保游戏对象已连接刚体组件,并且未选中“使用重力”

我有个问题。我正在做一个很大程度上取决于重力的游戏。现在我想让玩家对象对其他具有特定标记的对象具有重力。这是一个2d游戏。我怎样才能给球员这种重力?我更喜欢c#脚本,但java也不错


谢谢你的帮助

使用FixedUpdate方法创建脚本,并在此方法中计算和应用刚体力

用于计算脚本中的重力强度。在脚本的循环中,计算每个单独的重力向量,然后求和为最终的重力向量,这是游戏对象将被拉向的方向

例如(C#):

//将此脚本附加到将受重力影响的游戏对象
//确保游戏对象已连接刚体组件,并且未选中“使用重力”
公共类GravityScript:MonoBehavior
{
刚体刚体;
Transform[]gravitySources;//在inspector中指定每个变换,这些变换将是重力源。
无效开始()
{
刚体=GetComponent();
}
//注:包括适当的单个重力(来自远处物体的重力弱于来自较近物体的重力)
私有向量3计算权限()
{
矢量3重力=矢量3.0;
//对于每个重力源,累积总重力
foreach(重力源中的变换源)
{
//重力方向
Vector3方向=transform.position-source.position;
//计算远处的重力强度
浮动重力强度=矢量3.距离(变换位置、源位置)*????;
重力+=方向。归一化*重力强度;
}
返回重力;
}
无效固定更新()
{
矢量3重力=计算重力();
刚体.附加力(重力,力模式.加速度);
}
}
// Attach this script to gameObject that will be affected by gravity
// Ensure gameObject has rigidbody component attached and "Use Gravity" is UNCHECKED
public class GravityScript : MonoBehaviour
{

    Rigidbody rigidbody;
    Transform[] gravitySources; // Assign each Transform in inspector, these will be sources of gravity.

    void Start ()
    {
        rigidbody = GetComponent<Rigidbody>();
    }

    // NOTE: Include proper individual gravitational forces (gravity from far away objects is weaker than gravity from closer objects)
    private Vector3 CalculateGravity()
    {
        Vector3 gravity = Vector3.zero;

        // For each source of gravity accumulate total gravitational force
        foreach (Transform source in gravitySources)
        {
            // Direction of gravity
            Vector3 direction = transform.position - source.position;
            // Calculate strength of gravity at distance
            float gravitationalStrength = Vector3.Distance(transform.position, source.position) * ????;
            gravity += direction.normalized * gravitationalStrength;
        }

        return gravity;
    }

    void FixedUpdate ()
    {
        Vector3 gravity = CalculateGravity();
        rigidbody.AddForce(gravity, Forcemode.Acceleration);
    }
}