做一个快速的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);}
}
}
答案 0 :(得分:0)
严格的OOP语言中有两种函数:
您在课堂上调用的静态函数。控制台类功能就是教科书的例子。
您在特定实例上调用的Instanc函数。您想要此特定实例的SetTriggers。
有时会出现静态覆盖 - 通常需要您将实例作为参数之一。
但是这些都与Unity或游戏开发无关。这只是您可以在简单的控制台应用中学到的基本编程。