我正在创建一个简单的无尽的亚军游戏 . 地面由不同的碰撞器组成 . 动画有四种状态:
-
跑,
-
获取力量,
-
跳,
-
大跳 .
每个州都是循环的,没有退出时间 .
不幸的是,它不能很好地工作 . 最大的问题是,当我快速按下空格键时,角色在空中处于状态0(运行动画) . 有时,在空中,角色也能够获得力量 . 对我而言,即使角色正在跳跃,它也可以碰到另一个对手 . 但是,我的预防方法不起作用 . 如何使这些动画状态与角色行为相匹配?
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Move : MonoBehaviour {
public Animator animator;
Rigidbody rigidBody;
CapsuleCollider capsuleCollider;
int isGrounded=2;
int jumpType;
float force = 2;
float jump = 20000;
float minJump = 0.1f;
float jumpTime;
bool isJumping;
void Start ()
{
animator = GetComponentInChildren<Animator>();
rigidBody=GetComponent<Rigidbody>();
capsuleCollider = GetComponent<CapsuleCollider>();
}
void Update()
{
if(isJumping)
{
jumpTime+=Time.deltaTime;
}
// if the character is grounded
if (isGrounded==1)
{
//jump if the key is released, jump
if(Input.GetKeyUp(KeyCode.Space) || Input.GetMouseButtonUp(0))
{ isJumping=true;
isGrounded=2;
if(rigidBody.velocity.y<30)
{
rigidBody.AddForce(Vector3.up*jump*force*0.55f);
jumpType=2;
if (force>2.5f) jumpType =3;
animator.SetInteger("state",jumpType);
force=2;
}
}
//if the key is pressed, add force. longer you hold, higher you jump
else if(Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
{
animator.SetInteger("state",1);
force+=Time.deltaTime*0.7f;
}
//just keep running
else if(rigidBody.velocity.y<0)
{
animator.SetInteger("state",0);
}
}
}
void OnCollisionEnter(Collision collision)
{
//you are grounded. additional 'if', because sometimes you touch collider after jump
if(isJumping && isGrounded==2)
{ if(jumpTime>minJump)
{
isGrounded=1;
isJumping=false;
jumpTime=0;
}}
}
}
1 回答
如果有人关心,通过将转换持续时间减少到0来解决问题 . 可以在检查员中完成 .