在触发按钮上播放动画的代码似乎不起作用。我在Youtube上看到了一个视频,并且在视频中使用了一个简单的animation.Play();
,但是我无法在计算机上使用它。我做错了什么或团结改变了什么?请帮助我无法在网上找到解决方案。所有“解决方案都不起作用”。
这是我得到的错误:
类型
UnityEngine.Component
不包含播放定义 并且没有Play
类型的扩展方法UnityEngine.component
找到了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class animationtrigger : MonoBehaviour {
void Start()
{
}
int speed = 10;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown("N"))
{
animation.Play("Cube|moving side");
//transform.Translate(1 * Vector3.forward * Time.deltaTime * speed);
//Animator anim = GetComponent<Animator>();
//if (null != anim)
// {
// anim.Play("Cube|moving side");
// }
}
}
}
答案 0 :(得分:4)
我做错了什么或团结改变了什么?
Unity改变了。过去几周我见过similar个问题。虽然我不认为它们是重复的,但在未来的问题中回答所有这些是有意义的。
animation
变量在Component
下定义为public
变量,MonoBehaviour
继承自MonoBehaviour
。然后,您的代码将继承自animation
,并且您可以访问Component
。
这些是不推荐使用的public Component animation { get; }
public Component audio { get; }
public Component camera { get; }
public Component collider { get; }
public Component collider2D { get; }
public Component constantForce { get; }
public Component guiElement { get; }
public Component guiText { get; }
public Component guiTexture { get; }
public Component hingeJoint { get; }
public Component light { get; }
public Component networkView { get; }
public Component particleEmitter { get;
public Component particleSystem { get; }
public Component renderer { get; }
public Component rigidbody { get; }
public Component rigidbody2D { get; }
类的完整变量列表:
GetComponent<ComponentName>()
访问附加到同一脚本的组件的新方法:
使用AudioSource
。大写该变量的第一个字母,使其成为组件类。成为一个例外是音频
animation.Play("Cube|moving side");
代替音频。
1 。GetComponent<Animation>().Play("Cube|moving side");
变为rigidbody2D.velocity
2 。GetComponent<Rigidbody2D>().velocity
变为rigidbody.velocity
3 。GetComponent<Rigidbody>().velocity
变为renderer.material
4 。GetComponent<Renderer>().material
变为particleSystem.Play()
5 。GetComponent<ParticleSystem>().Play()
变为collider2D.bounds
6 。GetComponent<Collider2D>().bounds
变为collider.bounds
7 。GetComponent<Collider>().bounds
变为audio.Play("shoot");
8 。GetComponent<AudioSource>().Play("shoot");
变为camera.depth
9 。GetComponent<Camera>().depth
变为Animation myAnimation;
void Start()
{
//Cache animation component
myAnimation = GetComponent<Animation>();
}
void Update()
{
if(somethingHappens)
{
//No GetComponent call required again
myAnimation.Play("Cube|moving side");
}
}
我没有把它们全部放在一起,因为下面的例子应该指导任何人这样做。这些是SO上提问和询问最多的组件。
缓存组件:
您可以缓存组件,以便每次都没有GetComponent。
local i = 1
for i == 1
game.Workspace.Time.Value = 0
wait(120)
game.Workspace.Time.Value + 0.5
end
答案 1 :(得分:-1)
如果您正在使用动画制作者且想要播放特定状态,那么您可以这样做:
animator.Play("stateName");
我在下面的评论代码中看到了这一点。这应该是有效的。如果没有发生任何事情,请确保“Cube | moving side”是STATE名称而不是ANIMATION名称。还要确保状态实际包含动画,并且动画实际上包含帧数据。
(下面,我有2个状态(Move和Idle)。状态名称是“Move”,而动画名称是“test”。)
如果我想切换到移动状态,我会调用 animator.Play(“移动”) 。
此外,我不建议明确地播放状态。如果你可以管理它通常更好地制作状态树并使用参数触发动画。您在上图中看到我之间有两种状态和转换。您可以指定可以使我的动画师从一个切换到另一个的参数。
这里我使用“示例动画触发器”使动画师从空闲状态切换到移动状态。我可以在代码中执行此操作:
animator.SetTrigger("ExampleAnimTrigger");
这是使用Unity动画的更现代的方式,所以我强烈建议选择它。