unity 可以用两种方式控制动画
1. Animation
Animation an;//动画组件
void Start()
{
an = GetComponent<Animation>(); //获取动画组件
}
public enum PlayerState
{
Idle,
Fire,
Reload,
Melee
}
void PlayAnimation(GameRes.PlayerState ps)
{
switch (ps)
{
case GameRes.PlayerState.Idle:
an.Play("Idle");
break;
case GameRes.PlayerState.Fire:
an.Play("Fire");
break;
case GameRes.PlayerState.Reload:
an.Play("Reload");
break;
case GameRes.PlayerState.Melee:
an.Play("Melee");
break;
default:
break;
}
}
2.Animator
//检查是否正在播放jump动画.
AnimatorStateInfo stateinfo = anim.GetCurrentAnimatorStateInfo(0);
bool playingJump = stateinfo.IsName("jump");
if(playingJump)
{
if(stateinfo.normalizedTime < 1.0f)
{
//正在播放
}
else
{
//播放结束
}
}
控制播放时间
Animator ator = go1.GetComponent<Animator>();
var stateinfo = ator.GetCurrentAnimatorStateInfo(0);
if(stateinfo.IsName("Jump"))
{
ator.speed = 2;
}
用Animator实现人物,走、跑。
void Move()
{
Vector3 dir = Vector3.zero;
if (character.isGrounded)
{
float h = Input.GetAxis("Horizontal") * speed;
float v = Input.GetAxis("Vertical") * speed;
dir = new Vector3(h, 0, v);
if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0&&po)
{
an.SetInteger("Walk", 5);
if (!ac.isPlaying)
{
ac.PlayOneShot(Clip);
}
transform.rotation = Quaternion.LookRotation(new Vector3(h, 0, v));//注视旋转
}
else if (Input.GetKeyDown(KeyCode.K))
{
if (p)
{
an.SetInteger("Run", 4);
po = false;
if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0 && po == false)
{
transform.rotation = Quaternion.LookRotation(new Vector3(h, 0, v));//注视旋转
}
p = !p;
}
else
{
po = true;
an.SetInteger("Run", 2);
p = !p;
}
}
else if (Input.GetKeyDown(KeyCode.L))
{
if (q)
{
an.SetInteger("Sneak", 2);
q = !q;
}
else
{
an.SetInteger("Sneak", 0);
q = !q;
}
}
else
{
an.SetInteger("Walk", 3);
}
}
character.SimpleMove(dir);
}
实现摄像机跟随
private Transform player;
public float x=4, y=5;
public float speed = 2;
void Start()
{
//通过标签获取游戏中的对象
player = GameObject.FindWithTag("Player").transform;
}
void Update()
{
if (player != null)
{
//计算出摄像机的目标位置,即玩家角色的位置+摄像机的偏移值
Vector3 targetPos = player.position + new Vector3(0, x, y);
//设置摄像机位置
transform.position = Vector3.Lerp(transform.position, targetPos, speed * Time.deltaTime);
//计算出摄像机面向玩家角色的旋转角度
Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);
//设置摄像机旋转
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
}
}