您的位置:首页 > 移动开发 > Unity3D

Unity3D 之3D游戏角色控制器运动

2016-06-09 21:20 656 查看
3D运动,绑定了人形控制器后的一个简单的运动方法。

using UnityEngine;
using System.Collections;

public class PlayerMove : MonoBehaviour {

private CharacterController cc;
private Animator animator;
public float speed = 4;

void Awake() {
cc = this.GetComponent < CharacterController>();
animator = this.GetComponent<Animator>();
}

// Update is called once per frame
void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");

//按键的取值,以虚拟杆中的值为优先
if (Joystick.h != 0 || Joystick.v != 0) {
h = Joystick.h;
v = Joystick.v;
}

if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1) {
animator.SetBool("Walk", true);
if (animator.GetCurrentAnimatorStateInfo(0).IsName("PlayerRun")) {
Vector3 targetDir = new Vector3(h, 0, v);
transform.LookAt(targetDir + transform.position);
cc.SimpleMove(transform.forward * speed);
}
} else {
animator.SetBool("Walk", false);
}
}
}


复杂的运动,比如尝试着通过动力移动控制器。

public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
//一个复杂的运动
if (cc.isGrounded)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;

}
moveDirection.y -= gravity * Time.deltaTime;
cc.Move(moveDirection * Time.deltaTime);


可以完成人物贴在地面上运动的效果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: