首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity 2D:为什么我的角色在其他几何体中移动时不会停止?

Unity 2D:为什么我的角色在其他几何体中移动时不会停止?
EN

Stack Overflow用户
提问于 2014-08-02 22:32:45
回答 1查看 1K关注 0票数 0

每当使用A或D时,我的角色(2维游戏对象)不会被其他游戏对象停止。角色具有附加的角色控制器组件以及具有3个动画(空闲、漫步和陆地)的动画控制器。

代码语言:javascript
复制
//Variables
public float speed = 10F;
public float jumpSpeed = 15F; 
public float gravity = 20F;
public float airSpeed = 5F;
public Vector2 moveDirectionResultant = Vector2.zero;
private CharacterController controller;
private Animator animator;


void Start() {

    controller = GetComponent<CharacterController>();
    animator = GetComponent<Animator>();
}

void Update() {

    animator.SetFloat ("AirSpeed", moveDirectionResultant.y);

    if (controller.isGrounded) 
    {
        animator.SetBool("Grounded", true);
        animator.SetBool("Move", false);

                    if (Input.GetKeyDown (KeyCode.W)) 
                    {
            moveDirectionResultant.y = jumpSpeed;
                    }

                    else
                    {
            moveDirectionResultant.y =  0;
                    }


                    if (Input.GetKey (KeyCode.D)) 
                    {
            transform.Translate(speed * Time.deltaTime, 0f, 0f);
            animator.SetBool("Move", true);
                    }

                    if (Input.GetKey (KeyCode.A)) 
                    {
            transform.Translate(-speed * Time.deltaTime, 0f, 0f);
            animator.SetBool("Move", true);
                    }

    }

    else 
    {
        animator.SetBool("Grounded", false);
        animator.SetBool("Move", false);

                if (Input.GetKey (KeyCode.D)) 
                {
            transform.Translate(airSpeed * Time.deltaTime, 0f, 0f);;
                }

                if (Input.GetKey (KeyCode.A)) 
                {
            transform.Translate(-airSpeed * Time.deltaTime, 0f, 0f);;
                }



    }



    //Applying gravity to the controller
    moveDirectionResultant.y -= gravity * Time.deltaTime;
    //Making the character move
    controller.Move(moveDirectionResultant * Time.deltaTime);
}

}

我对编码比较陌生,所以如果解决方案是显而易见的,我很抱歉!

EN

回答 1

Stack Overflow用户

发布于 2014-08-02 22:40:32

尝试将RigidBody2DBoxCollider2D附加到游戏对象以及要碰撞的任何游戏对象。如果您希望冲突导致事件发生(要调用的方法),请在附加到游戏对象的脚本中使用OnCollisionEnter2D(Collision2D collision)方法。来自unity网站的这段教程视频详细介绍了2d角色控制和动画:http://unity3d.com/learn/tutorials/modules/beginner/2d/2d-controllers

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25096108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档