c# - Unity 2D:万有引力
问题描述
我正在开发一个小游戏:我希望将所有游戏对象拉到屏幕中间,在那里它们应该与另一个游戏对象发生碰撞。
我试过这个尝试:
using UnityEngine;
using System.Collections;
public class Planet : MonoBehaviour
{
public Transform bird;
private float gravitationalForce = 5;
private Vector3 directionOfBirdFromPlanet;
void Start ()
{
directionOfGameObjectFromMiddle = Vector3.zero;
}
void FixedUpdate ()
{
directionOfGameObjectFromMiddle = (transform.position-bird.position).normalized;
bird.rigidbody2D.AddForce (directionOfGameObjectFromMiddle * gravitationalForce);
}
}
可悲的是我无法让它工作。有人告诉我,我必须为正在拉动的对象提供另一个脚本,但是是否可以仅使用在拉动对象上使用的一个脚本来执行此操作?
解决方案
所以首先你有很多甚至无法编译的拼写错误/代码。
你使用 eg 一次directionOfBirdFromPlanet
,但后来调用它directionOfGameObjectFromMiddle
;)你Start
是相当多余的。
如前所述bird.rigidbody2D
,您应该使用甚至GetComponent<Rigidbody2D>()
更好地直接制作您的类型字段
public Rigidbody2D bird;
对于拥有多个对象,您可以简单地将它们分配给 List 并执行
public class Planet : MonoBehaviour
{
// Directly use the correct field type
public List<Rigidbody2D> birds;
// Make this field adjustable via the Inspector for fine tuning
[SerializeField] private float gravitationalForce = 5;
// Your start was redundant
private void FixedUpdate()
{
// iterate through all birds
foreach (var bird in birds)
{
// Since transform.position is a Vector3 but bird.position is a Vector2 you now have to cast
var directionOfBirdFromPlanet = ((Vector2) transform.position - bird.position).normalized;
// Adds the force towards the center
bird.AddForce(directionOfBirdFromPlanet * gravitationalForce);
}
}
}
然后在这个星球上你引用所有的bird
对象
在鸟类的Rigidbody2D
组件上,确保设置
Gravity Scale
->0
你也可以用Linear Drag
简单的话来玩一下物体在移动时应该减速多少
例如,这就是它的样子,Linear Drag = 0
因此您的对象将继续以相同的“能量”远离中心
这就是发生的事情,Linear Drag = 0.3
所以你的物体会随着时间的推移失去“能量”
推荐阅读
- python - 在 pycharm 中使用 python 实现 WebdriverWait 时显示未解析的引用“EC”
- mongodb - 按特定字段对 MongoDB 文档进行分组和计数
- uiwebview - 将 UIWebView 替换为 WKWebView,但仍然来自 Apple 的相同错误
- python - 使用 shift 替换 DataFrame 中的 NaT
- python - Tkinter - 使用 place() 用文本小部件填充框架
- next.js - 我如何将 Linaria 与 NextJS 一起使用?
- awk - 使用 awk 或 sed 将小数点添加到整数
- javascript - jQuery如何重复动画
- mysql - NodeJS获取mysql查询结果
- logging - 如何在独白中使用 DeduplicationHandler?