есть ли способ запустить анимацию другого игрового объекта, когда другой игровой объект сталкивается с другим игровым объектом?

#c# #unity3d

#c# #unity3d

Вопрос:

теперь я знаю, что название звучит запутанно, но позвольте мне объяснить мою проблему. У меня есть некоторый код, который заставляет игровой объект запускать свою анимацию, когда он сталкивается с игровым объектом с определенным именем. есть ли способ сделать так, чтобы при столкновении моего проигрывателя с игровым объектом запускалась определенная анимация gameobjects без столкновения с этим конкретным gameopject? Я хочу, чтобы стена перевернулась, когда мой игрок наступает на куб, который действует как моя нажимная пластина. Вот мой текущий код:

 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WallFlip : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    
    void OnCollisionEnter(Collision collision)
    {


        if (collision.gameObject.name == "FlipPlate")
        {

            GetComponent<Animation>().Play("WallFlip");

        }


    }
}

  

Комментарии:

1. Сделайте что-то вроде этого youtube.com/watch?v=6vj_Ie9i-Ak но воспроизведите свою анимацию на двери, а не меняйте ее положение. Есть много примеров такого рода вещей.

2. Если у вас есть все соответствующие ссылки… да, почему бы и нет? В чем именно заключается ваша проблема?

Ответ №1:

Я думаю, что что-то подобное сработает, если вы прикрепите его к проигрывателю.

 //SerializeField makes it visible in inspector. This is better than making it public bc of encapsulation
[SerializeField]
private GameObject wallThatWillFlip = null;

void OnCollisionEnter(Collider collider)
{
    //do note that checking for the name will work but is not generally best practice.
    if(collider.gameObject.name == "FlipPlate")
    {
        wallThatWillFlip.GetComponent<Animation>.Play("WallFlip);
    }
}
  

Тем не менее, я бы поместил подобный скрипт на «FlipPlate», который вместо этого проверял бы игрока. Это было бы немного аккуратнее и позволило бы вам назначать разные стены разным флипплатам, если бы вы захотели это сделать.

Комментарии:

1. Я попробовал видео и использовал свою анимацию вместо vector three, но анимация не воспроизводится! (ошибок компиляции нет) я перетащил граббер в преобразование, я убедился, что анимация на граббере настроена правильно и что имя совпадает с именем в скрипте. что я делаю не так? вот мой код ниже.

2. using System.Collections; using System.Collections.Generic; using UnityEngine; public class triggerGrab : MonoBehaviour { [SerializeField] GameObject grabber; void OnTriggerEnter(Collider col) { grabber.GetComponent<Animation>().Play("grabLift"); } }