我正在制作一个角色在人与鸟之间切换的游戏。当他是人类时,他可以推动一个桶。当他是一只鸟时,我想增加枪管的质量,这样就更难以推动。我目前在玩家和枪管上都有一个BoxCollider2D和RigidBody2D。没有设置触发器。
这是我在桶上的脚本。
private GrimScript script;
private Rigidbody2D rb;
public float normalMass = 10f;
public float heavyMass = 100f;
// Use this for initialization
void Awake ()
{
script = GameObject.FindGameObjectWithTag("Player").GetComponent<GrimScript>();
rb = gameObject.GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update ()
{
}
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Player") && script.amIRaven)
{
rb.mass = heavyMass;
}
else
{
rb.mass = normalMass;
}
}
答案 0 :(得分:0)
问题实际上是我对附加到播放器(GrimScript)的脚本的引用。碰撞和群众工作的参考就好了。我让玩家gameobject成为一个公共变量,然后访问该变量的组件。
public class BarrelPush : MonoBehaviour {
public GameObject thePlayer;
private GrimScript script;
private Rigidbody2D rb;
public float normalMass = 10f;
public float heavyMass = 100f;
// Use this for initialization
void Awake() {
//script = gameObject.FindGameObjectWithTag("Player").GetComponent<GrimScript>();
script = thePlayer.GetComponent<GrimScript>();
rb = gameObject.GetComponent<Rigidbody2D>();
}
void OnCollisionEnter2D(Collision2D other) {
if (other.gameObject.CompareTag("Player") && script.amIRaven)
{
rb.mass = heavyMass;
} else
{
rb.mass = normalMass;
}
}
}
答案 1 :(得分:-1)
UE4开发者在这里。如果我要在UE4中完成此任务。我有一个触发器声明,检查玩家是人还是鸟形式,然后根据用户的具体形式,将质量变量设置为给定量,只需改变演员的速度,然后移动该项目慢。
根据塞尔达传说以及当Link进入一个盒子时,他的动画(取决于游戏)要么放慢速度,要么只是继续一步一步地走进盒子,物体在给定的方向上慢慢移动。
有很多变量需要考虑,例如你计划如何移动物品,是否在物理上捡起它,只是将它滑过地板等等。
- 编辑1 -
重读你的帖子后,我意识到你似乎是在一个非常线性的方向上移动一个桶,在这种情况下,类似塞尔达的方法会更容易。只需改变动画的速度,或者改变动画或保持相同。我觉得搞乱物理学是超出你的编程经验,如果有一个更简单的方法来接受它。