#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"); } }