现在,我知道标题听起来很混乱,但让我解释一下我的问题。我有一些代码使游戏对象与具有特定名称的游戏对象碰撞时触发其动画。有没有办法做到这一点,当我的玩家与游戏对象碰撞时,它将触发特定的游戏对象动画,而无需碰撞特定的游戏对象?当玩家踩在充当压力板的立方体上时,我希望墙壁向上翻转。这是我当前的代码:
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");
}
}
}
答案 0 :(得分:0)
我认为,如果将其连接到播放器,则类似的事情会起作用。
//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”上放一个类似这样的脚本,用来检查播放器。这样会比较整洁,并且如果您愿意,可以将不同的墙分配给不同的FlipPlate。