C# 声明要设置动画的游戏对象
我有一个教程场景,你穿过关卡到达一个特定的门,当你与它碰撞时,它会禁用顶部的画布,并设置门的动画。我在脚本文档中到处搜索,但找不到解决方案。您声明要设置动画的对象是什么类型的变量 我试图声明C# 声明要设置动画的游戏对象,c#,animation,unity3d,unity5,C#,Animation,Unity3d,Unity5,我有一个教程场景,你穿过关卡到达一个特定的门,当你与它碰撞时,它会禁用顶部的画布,并设置门的动画。我在脚本文档中到处搜索,但找不到解决方案。您声明要设置动画的对象是什么类型的变量 我试图声明public GameObject/Transform UIQuest和UIQuest.Animation.Play(“DoorOpen”),但它出现了一个错误,即在API中没有动画。我是完全错了,还是我遗漏了一些简单的东西 完整脚本: using UnityEngine; using System.Coll
public GameObject
/Transform UIQuest
和UIQuest.Animation.Play(“DoorOpen”)
,但它出现了一个错误,即在API中没有动画。我是完全错了,还是我遗漏了一些简单的东西
完整脚本:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class DoorOpen : MonoBehaviour {
public GameObject door;
public Canvas UIQuest;
void Start () {
}
void Update () {
}
void OnCollisionEnter(Collision doorCollision)
{
if (doorCollision.gameObject.name == "Door")
{
door.Animation.Play("DoorOpen");
UIQuest.enabled = false;
}
}
}
由于游戏对象只执行简单的动画,您不需要任何特殊的东西(如AnimationController),您只需执行门随时间的旋转,将门的枢轴设置为边缘,并在满足条件时(即检测到碰撞时)沿y轴旋转门
比如:
gameobject.transform.Rotate(0, rotationAmount * Time.DeltaTime, 0);
您还需要逻辑来决定何时停止旋转(即门完全打开时),除非您需要旋转门。此外,如果门只是一个滑动门,则执行平移而不是旋转更容易。由于游戏对象只执行简单的动画,您不需要任何特殊的东西(如AnimationController),您只需要执行门随时间的旋转,将门的枢轴设置为边缘,并在满足条件(即检测到碰撞)时沿y轴旋转门
比如:
gameobject.transform.Rotate(0, rotationAmount * Time.DeltaTime, 0);
您还需要逻辑来决定何时停止旋转(即门完全打开时),除非您需要旋转门。此外,如果门只是一个滑动门,则执行平移而不是旋转更容易。门是什么类型的对象?它只是一个你正在旋转的平面还是一个实际的模型?如果是这样的话,门是否定义了任何动画以及连接到对象的动画控制器?@Matthew Pigram这是一个简单的立方体,我已重新缩放以适应大小。您不需要任何特殊的东西,只需随时间旋转门,当条件满足时(即检测到碰撞时),将门的枢轴设置为拐角,并沿y轴旋转门。类似于gameobject.transform.Rotate(0,rotationAmount*Time.DeltaTime,0)
门是什么类型的对象?它只是一个你正在旋转的平面还是一个实际的模型?如果是这样的话,门是否定义了任何动画以及连接到对象的动画控制器?@Matthew Pigram这是一个简单的立方体,我已重新缩放以适应大小。您不需要任何特殊的东西,只需随时间旋转门,当条件满足时(即检测到碰撞时),将门的枢轴设置为拐角,并沿y轴旋转门。类似于gameobject.transform.Rotate(0,rotationmount*Time.DeltaTime,0)
一个简单的问题,我如何将轴心点设置到边缘?我尝试过使用一个空的游戏对象,并将门设置为小孩,但它仍然在中心旋转。你走对了!在本例中,您将旋转空的游戏对象,而不是旋转门。在旋转游戏对象之前,请确保将其放置在门的边缘。我的方法是在door脚本中创建一个名为PivotPoint的公共变量,类型为Gameobject,然后在编辑器中将作为轴心的空Gameobject拖动到inspector中的变量中,然后在脚本中通过其变换旋转轴心点:数据轴心似乎工作,但是Unity说它对DeltaTime没有定义。是deltaTime,还是我必须引用其他内容?对不起,是的,我认为它是deltaTime,应该类似于时间。deltaTime
好的,实际上还有一个问题,停止旋转的逻辑是什么?我想出了一个似乎可以(但不能)工作的方法:if(pivot.transform.rotation.eulerAngles.y==83){pivot.GetComponent().freezeRotation=true;}
但它似乎仍然可以旋转——仅仅是一个简单的问题,我如何将轴心点设置到边缘?我尝试过使用一个空的游戏对象,并将门设置为小孩,但它仍然在中心旋转。你走对了!在本例中,您将旋转空的游戏对象,而不是旋转门。在旋转游戏对象之前,请确保将其放置在门的边缘。我的方法是在door脚本中创建一个名为PivotPoint的公共变量,类型为Gameobject,然后在编辑器中将作为轴心的空Gameobject拖动到inspector中的变量中,然后在脚本中通过其变换旋转轴心点:数据轴心似乎工作,但是Unity说它对DeltaTime没有定义。是deltaTime,还是我必须引用其他内容?对不起,是的,我认为它是deltaTime,应该类似于时间。deltaTime好的,实际上还有一个问题,停止旋转的逻辑是什么?我想到了一个似乎应该有效(但没有)的方法:if(pivot.transform.rotation.eulerAngles.y==83){pivot.GetComponent().freezeRotation=true;}
但它似乎仍然会永远旋转