C# 将旧的Unity代码升级到Unity 5
在触发器按钮上播放动画的代码似乎不起作用。我在Youtube上看到了一个视频,里面有一个简单的C# 将旧的Unity代码升级到Unity 5,c#,unity3d,C#,Unity3d,在触发器按钮上播放动画的代码似乎不起作用。我在Youtube上看到了一个视频,里面有一个简单的animation.Play()它在那个视频上起作用了,但是,我无法让它在我的电脑上工作。我做错了什么,或者unity改变了它?请帮忙,我在网上找不到解决办法。所有的“解决方案也不起作用” 这是我得到的错误: 类型UnityEngine.Component不包含播放定义 没有UnityEngine.component类型的扩展方法Play 被发现 使用系统集合; 使用System.Collections
animation.Play()代码>它在那个视频上起作用了,但是,我无法让它在我的电脑上工作。我做错了什么,或者unity改变了它?请帮忙,我在网上找不到解决办法。所有的“解决方案也不起作用”
这是我得到的错误:
类型UnityEngine.Component
不包含播放定义
没有UnityEngine.component
类型的扩展方法Play
被发现
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类animationtrigger:MonoBehavior{
void Start()
{
}
内速度=10;
//每帧调用一次更新
无效更新(){
if(Input.GetKeyDown(“N”))
{
动画。播放(“立方体|移动侧”);
//transform.Translate(1*Vector3.forward*Time.deltaTime*speed);
//Animator anim=GetComponent();
//如果(空!=动画)
// {
//动画游戏(“立方体|移动侧”);
// }
}
}
}
如果您正在使用动画师,并且希望播放特定状态,则可以执行以下操作:
animator.Play("stateName");
我在下面的注释代码中看到了这一点。这应该行得通。如果没有发生任何事情,则确保“立方体|移动侧”是一个状态名称,而不是动画名称。还要确保该状态实际包含动画,并且动画实际包含帧数据
(下面,我有两种状态(移动和空闲)。状态名为“移动”,而动画名为“测试”。)
如果我想切换到移动状态,我会调用animator.Play(“移动”)
另外,我也不推荐明确的比赛状态。如果您可以管理,通常最好创建状态树并使用参数触发动画。你可以在上面的图片中看到我是如何拥有两种状态以及它们之间的转换的。您可以指定可以使我的动画师从一个切换到另一个的参数
在这里,我使用“示例动画触发器”使动画师从空闲状态切换到移动状态。我可以通过以下代码来完成此操作:
animator.SetTrigger("ExampleAnimTrigger");
这是使用Unity动画的更现代的方式,所以我强烈建议您选择它
我做错了什么,或者unity改变了它
团结改变了。在过去的几周里,我看到了一些问题。虽然我不认为它们是重复的,但在这里回答所有这些问题对于将来的问题是有意义的
动画
变量在组件
下定义为公共
变量,该变量由单一行为
继承。然后,您的代码继承自monobhavior
,您可以访问动画
以下是组件
类中已弃用的变量的完整列表:
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()
。将该变量的第一个字母大写,使其成为其组件类。一个例外是音频,它变成
音频源
代替音频
1动画。播放(“立方体移动侧”)代码>变成GetComponent().Play(“立方体|移动侧”)代码>
2rigidbody2D.velocity
变为GetComponent().velocity
3rigidbody.velocity
变为GetComponent().velocity
4renderer.material
变为GetComponent().material
5particleSystem.Play()
变为GetComponent().Play()
6collized.bounds
变成GetComponent().bounds
7collider.bounds
变为GetComponent().bounds
8音频播放(“拍摄”)代码>变成GetComponent().Play(“shoot”)代码>
9camera.depth
变为GetComponent().depth
我不必把所有这些都放进去,因为下面的例子应该可以指导任何人这样做。这些都是被问到最多和被问到最多的组件
缓存组件:
您可以缓存组件,这样就不必每次都是GetComponent
Animation myAnimation;
void Start()
{
//Cache animation component
myAnimation = GetComponent<Animation>();
}
void Update()
{
if(somethingHappens)
{
//No GetComponent call required again
myAnimation.Play("Cube|moving side");
}
}
动画myAnimation;
void Start()
{
//缓存动画组件
myAnimation=GetComponent();
}
无效更新()
{
如果(发生了什么事)
{
//无需再次调用GetComponent
myAnimation.Play(“立方体|移动侧”);
}
}
你所说的不工作是什么意思?你有什么错误吗?解释你遇到的问题。我在问题中添加了错误检查我的答案。如果下次有错误消息,请将其包括在内。你在找#1。阅读其余部分,否则在我更改代码后,你会再次问类似的问题。monodevelop不再给出代码中的错误,但unity由于某种原因仍然找不到动画,即使我已经上传了它。请确保将动画检查为“遗留”,因为动画
组件是遗留内容。查看帖子以获得新问题的完整可能解决方案。nvm我发现答案只需进行调整(对象)->装配(选项卡)->将动画类型更改为LEGACYlol即可。我们几乎同时打字。谢谢你所做的一切。非常感谢您的帮助:)
Animation myAnimation;
void Start()
{
//Cache animation component
myAnimation = GetComponent<Animation>();
}
void Update()
{
if(somethingHappens)
{
//No GetComponent call required again
myAnimation.Play("Cube|moving side");
}
}