Как изменить массу объекта, когда игрок касается его?
Я делаю игру, в которой персонаж переключается между человеком и птицей. Когда он человек, он может толкнуть ствол. Когда он птица, я хочу увеличить массу ствола, чтобы его было сложнее толкать. В настоящее время у меня есть 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;
}
}
2 ответа
Проблема заключалась в моей ссылке на скрипт, прикрепленный к плееру (GrimScript). Столкновение и ссылка на массу работают просто отлично. Я сделал игровой объект игрока общедоступной переменной, а затем получил доступ к компоненту этой переменной.
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;
}
}
}
UE4 разработчик здесь. Если бы я должен был выполнить эту задачу в UE4. У меня есть оператор триггера, проверяющий, был ли игрок в форме человека или птицы, а затем, в зависимости от конкретной формы пользователя, либо устанавливают переменную массы на заданное количество, либо просто изменяют скорость актера, который, в свою очередь, будет перемещать элемент помедленнее.
Подумайте в терминах Legend of Zelda и о том, как, когда Линк входит в коробку, его анимация (в зависимости от игры) либо замедляется, либо он просто продолжает идти головой в коробку с объектом, медленно движущимся в заданном направлении.
Есть довольно много переменных, которые нужно учитывать, например, как вы планируете перемещать предмет, поднимаете ли вы его физически, просто скользите по полу и т. Д.
-EDIT 1--
Перечитывая ваш пост, я понимаю, что вы, кажется, двигаете бочку в очень линейном направлении, в этом случае подход, подобный Zelda, будет проще. Просто измените скорость ходьбы, одновременно меняя анимацию или оставляя ее неизменной. Я чувствую, что возиться с физикой - это за пределами вашего опыта программирования, если есть более простой подход к чему-либо, воспользуйтесь этим.