每当使用A或D时,我的角色(二维游戏对象)不会被其他游戏对象停止。该角色附有一个角色控制器组件以及一个带有3个动画(空闲,步行和着陆)的动画控制器。
//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);
}
}
我对编码比较陌生,所以如果解决方案很明显,我很抱歉!
答案 0 :(得分:0)
尝试将RigidBody2D
和BoxCollider2D
附加到您的游戏对象,以及您想要与之碰撞的任何游戏对象。如果您希望碰撞导致事件发生(要调用的方法),请在附加到游戏对象的脚本中使用OnCollisionEnter2D(Collision2D collision)
方法。 Unity团队网站上的这个教程视频详细介绍了2d角色控制和动画:http://unity3d.com/learn/tutorials/modules/beginner/2d/2d-controllers