尝试使用Unity中的脚本实例化对象时出现动画错误

时间:2018-06-06 20:39:50

标签: c# unity3d

我通过改进Unity的ARCore教程来制作游戏。 在识别了平面并触摸它之后,物体从它出来,并且在走到创建的物体之后,角色物体站在物体的前面。 我在这里创建了两个按钮,Jump和Angry,这样当我单击此按钮时,将执行相应的动画。 当您测试在场景中的预制件中创建的角色对象时,动画在单击时可以正常工作。

在此代码中,创建了一个对象和一个角色对象。

4
8
3
5
3
6
2

但是当你在设备上运行它时,角色只会挂在创建的对象上并停止,即使你触摸按钮,也不会应用后续动画。 因此,当我在设备上运行在Scene中创建的角色对象时,动画可以正常工作。 我不知道为什么。

这是允许Jump和Angry动画师工作的代码。

        Touch touch;
        if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
        {
            return;
        }

        // Raycast against the location the player touched to search for planes.
        TrackableHit hit;
        TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon |
            TrackableHitFlags.FeaturePointWithSurfaceNormal;

        if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit))
        {
            if (MaximumObject > currentlyObject)
            {
                currentlyObject = currentlyObject + 1;

                var tableObject = Instantiate(TablePrefab, hit.Pose.position, hit.Pose.rotation);

                // Create an anchor to allow ARCore to track the hitpoint as understanding of the physical
                // world evolves.
                var anchor = hit.Trackable.CreateAnchor(hit.Pose);


                // Andy should look at the camera but still be flush with the plane.
                if ((hit.Flags & TrackableHitFlags.PlaneWithinPolygon) != TrackableHitFlags.None)
                {
                    // Get the camera position and match the y-component with the hit position.
                    Vector3 cameraPositionSameY = FirstPersonCamera.transform.position;
                    cameraPositionSameY.y = hit.Pose.position.y;

                    // Have look toward the camera respecting his "up" perspective, which may be from ceiling.
                    tableObject.transform.LookAt(cameraPositionSameY, tableObject.transform.up);
                }
                // Make Andy model a child of the anchor.
                tableObject.transform.parent = anchor.transform;

                if (currentlyObject > 0)
                {                        
                    var boyObject = Instantiate(Boy, tableObject.transform.position , tableObject.transform.rotation);
                    boyObject.transform.Translate(new Vector3(0, -3, -10));                           
                }       

我尝试了几件事并尝试使用游戏对象而不实例化它,但是屏幕上根本没有出现该对象。 此外,如果您在资源中使用的对象不是在场景中创建的对象,则会显示消息“动画制作者未播放public Animator guest; public void Jump_motion() { guest.SetTrigger("Jump"); } public void Angry_motion() { guest.SetTrigger("Angry"); } ”。当您尝试在Animator AnimatorController上运行附加到预制件的方法而不是实例化的GameObject时,我也发现了此警告。我收到了答案。

如果是这样,那么只有在层次结构中实例化的对象才能正常接收动画,我将尝试使用脚本实例化它们。 我希望脚本实例化的角色对象会收到正常的动画命令,但我不知道该怎么做。

0 个答案:

没有答案