我试图让我的玩家击中一个物体,摧毁物体并触发动画,但我尝试的一切都会导致错误。我在c#比较新,所以答案可能很明显,但我需要帮助。如何设置它以使碰撞导致对象消失并让玩家播放动画?这是我目前正在尝试的脚本。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class succ : MonoBehaviour
{
public float speed = .15f;
public static float jumpSpeed = 170f;
void Start()
{
GetComponent<ConstantForce2D>().enabled = false;
GameObject.Find("goal");
}
public bool animation_bool;
private object coll;
private object other;
void Update()
{
OnCollisionStay2D(Collision2D coll);
{
if (coll.gameObject.tag == "succ") ;
{
animation_bool = true;
GetComponent<Animator>().SetBool("succ", animation_bool);
GetComponent<ConstantForce2D>().enabled = true;
Destroy(other.object);
}
}
}
private void Destroy(object gameObject)
{
throw new NotImplementedException();
}
private void OnCollisionStay2D(Collision2D collision2D, object coll)
{
throw new NotImplementedException();
}
}
答案 0 :(得分:0)
我可以看到一些错误的东西,但我会先回答你的问题。
我建议您将MonoBehaviour方法OnCollisionStay2D更改为OnCollisionEnter2D。 OnCollisionStay2D是“发送每个帧,其他对象上的对撞机正在触摸此对象的对撞机”。 OnCollisionEnter2D“在传入的对撞机与此物体的对撞机接触时发送”。
我相信你正在寻找后者,因为你只想在碰撞过程中触发一次。你也在摧毁另一个物体,即使你想这样做也不可能再打电话给OnCollisionStay2D。
您还应该删除Update方法。老实说,我不明白你现在想要达到的目标。所有的OnCollision方法都会自动调用;你不必自己打电话。
然后您可以使用Awake和OnCollisionEnter2D方法,如下所示
public class Succ : MonoBehaviour
{
private Animator animator;
private void Awake()
{
// You can already get a reference to the Animator on Awake
// This way you do not have to do it on every collision
animator = GetComponent<Animator>();
}
// Use OnCollisionEnter2D instead since the code
// needs to be excecuted only once during the collision
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("succ")
{
// Assuming that you only want to trigger an animation once
// to reflect attacking or colliding, you could use SetTrigger
// instead. Otherwise you need to use SetBool again to set it
// back to false. You should then change the Animator parameter
// accordingly, from a bool to a trigger.
animator.SetTrigger("succ");
Destroy(collision.gameObject);
}
}
}
除此之外,我还有一些我想评论的内容:
总的来说,我建议您查看Unity自己提供的所有不同学习资源。您的问题是关于相当基本的功能,这些功能在所有不同的教程中都有所涉及。