获取动画的对象参考并执行

时间:2018-02-13 13:31:57

标签: c# animation unity3d reference unityscript

做一个快速的2D游戏以熟悉Unity,我遇到了一个似乎没有人遇到任何问题的问题。

这是我最初收到的错误:

Assets/scripts/Receiver.cs(33,13): 
    error CS0120: An object reference is required to access non-static member 
    `UnityEngine.Animator.SetTrigger(string)'

我更新了Animator.SetTrigger to myAnimator.SetTrigger的代码并删除了错误,我可以测试游戏,但动画无法通过。

我希望这些对象在被击中后动画并消失,但这些是非移动的对象,并且没有空闲动画。我设置了一个触发器“IsDead”来激活动画。我想我错过了一些东西或者只是没有“得到它”。我试图找到类似的问题来尝试连接点(我是c#的新手)并最终找到以前版本的Unity中的旧功能,这些功能不起作用甚至以相同的方式存在。

在尝试添加动画之前,游戏运行良好。我只需要看看动画在游戏中的表现。

我不是要尝试单独的精灵交换。我试图了解如何制作一个连接到这个预制脚本的死亡动画,我可以适应未来的预制件。另外,我可以在不同的预制对象中为不同的动画师重复使用“IsDead”触发器吗?

有问题的一行是:

if(timesHit >= maxHits) *{Animator.SetTrigger ("IsDead");}

这会像参考一样工作吗? 在将来使用预制件和类似的反应物体时,这是我想要很好理解的东西..谢谢你的时间。

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

public class Receiver : MonoBehaviour {

    public int maxHits;
    private LevelManager levelManager;
    private int timesHit;

    Animator myAnimator;

    void Start () {
        var animator = gameObject.GetComponent<Animator>();
        timesHit = 0;
        levelManager = GameObject.FindObjectOfType<LevelManager> ();
    }

    void Update () {
    }

    void OnCollisionEnter2D (Collision2D col) {
        timesHit++;
        if (timesHit >= maxHits) {Animator.SetTrigger ("IsDead");}
    }

    void OnCollisionExit2D (Collision2D col) {
        if (timesHit >= maxHits) {Destroy (gameObject);}
    }
}

1 个答案:

答案 0 :(得分:0)

严格的OOP语言中有两种函数:

  1. 您在课堂上调用的静态函数。控制台类功能就是教科书的例子。

  2. 您在特定实例上调用的Instanc函数。您想要此特定实例的SetTriggers。

  3. 有时会出现静态覆盖 - 通常需要您将实例作为参数之一。

    但是这些都与Unity或游戏开发无关。这只是您可以在简单的控制台应用中学到的基本编程。