Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 团结不';t更新对象变换位置_C#_Unity3d_2d_Game Physics_Game Development - Fatal编程技术网

C# 团结不';t更新对象变换位置

C# 团结不';t更新对象变换位置,c#,unity3d,2d,game-physics,game-development,C#,Unity3d,2d,Game Physics,Game Development,我正在做一个2d小游戏,你可以控制一颗行星来躲避来袭的小行星。我用以下方式实现重力: public class Gravity : MonoBehaviour { Rigidbody2D rb; Vector2 lookDirection; float lookAngle; [Header ("Gravity")] // Distance where gravity works [Range(0.0f, 1000.0f)] public float m

我正在做一个2d小游戏,你可以控制一颗行星来躲避来袭的小行星。我用以下方式实现重力:

public class Gravity : MonoBehaviour
{
 Rigidbody2D rb;

 Vector2 lookDirection;

 float lookAngle;

 [Header ("Gravity")]
 
 // Distance where gravity works
 [Range(0.0f, 1000.0f)]
 public float maxGravDist = 150.0f;
 
 // Gravity force
 [Range(0.0f, 1000.0f)]
 public float maxGravity = 150.0f;
 
 // Your planet
 public GameObject planet;

 void Start()
 {
     rb = GetComponent<Rigidbody2D>();
 }

 void Update()
 {   
     // Distance to the planet
     float dist = Vector3.Distance(planet.transform.position, transform.position);

     // Gravity
     Vector3 v = planet.transform.position - transform.position;
     rb.AddForce(v.normalized * (1.0f - dist / maxGravDist) * maxGravity);

     // Rotating to the planet
     lookDirection = planet.transform.position - transform.position;
     lookAngle = Mathf.Atan2(lookDirection.y, lookDirection.x) * Mathf.Rad2Deg;

     transform.rotation = Quaternion.Euler(0f, 0f, lookAngle);  
 }
}
公共类重力:单一行为
{
刚体2d rb;
方向向量2;
浮动视角;
[标题(“重力”)]
//重力作用的距离
[范围(0.0f,1000.0f)]
公共浮点数maxGravDist=150.0f;
//重力
[范围(0.0f,1000.0f)]
公共浮子最大重力=150.0f;
//你的星球
公共游戏对象星球;
void Start()
{
rb=GetComponent();
}
无效更新()
{   
//到地球的距离
浮动距离=矢量3.距离(planet.transform.position,transform.position);
//重力
Vector3 v=planet.transform.position-transform.position;
rb.附加力(v.归一化*(1.0f-距离/最大重力)*最大重力);
//向行星旋转
lookDirection=planet.transform.position-transform.position;
lookAngle=Mathf.Atan2(lookDirection.y,lookDirection.x)*Mathf.Rad2Deg;
transform.rotation=Quaternion.Euler(0f,0f,lookAngle);
}
}
问题是小行星被吸引到行星的初始繁殖点(0,0),它不会随着行星的运动实时更新。所以如果我把行星移到屏幕的角落,小行星仍然会被吸引到它的中心

当我对每个值使用Debug.Log时,除了planet.transform.position保持在0,0,0之外,所有值都会更改,即使在移动它之后也是如此

这是地球刚体的问题吗?有什么设置吗?我有点迷路了

有办法解决这个问题吗


非常感谢,请原谅任何明显的错误

因为小行星是从预制件动态展成的,所以它们不是游戏对象,在脚本的gameobject变量上选择的行星是预制件,而不是场景中的真实游戏对象。我必须将这一行添加到我的生成脚本中

如果(间隔>随机){

GameObject newAsteroid=实例化(Asteroid预置, GetRandomPosition(),四元数.identity)

newAsteroid.GetComponent().planet=planet

}

在变量的顶部添加

公共游戏对象星球

在编辑器中的产卵器脚本中,拖放您的星球 游戏对象


这就解决了问题。

这个
1.0f-dist/maxGravDist
=
1.0f-150/150
=0所以你可能没有添加任何力?但是如果我没有添加任何力,小行星是如何移动的?嘿,你可能想检查一下你分配给
行星
区域的游戏对象。也许可以查看场景层次结构,检查行星本身是否是某个固定游戏对象的子对象。@rustyBucketBay它实际上是
1-dist/maxGravDist
=
1-?/150
!=<代码>0
除了
正好是
150
;)是的,150是默认值,所以如果编辑器中没有值,情况就是这样。这就是我的观点。谢谢:)