码迷,mamicode.com
首页 > 编程语言 > 详细

[Unity3d]How to control your player to move and rotate by using CharacterController

时间:2016-05-31 12:07:43      阅读:443      评论:0      收藏:0      [点我收藏+]

标签:

This article mainly talk about how to control move and rotate the player and simulate the gravity by using charactercontroller component.

 

 

now we add a component.just seems like this.

技术分享

 

we set the values to fit the scene,and now we gonna do the next.

 

we attach a new c# script named CharacterControl

here is the code.

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class CharacterControlScript : MonoBehaviour
 5 {
 6     //控制速度
 7     public float moveSpeed = 10.0f;
 8     public float rotateSpeed = 1.0f;
 9     public float jumpSpeed = 4.0f;      //the speed of jump
10     public float gravity = 1;           //the gravity
11 
12     private bool isMainPlayer = false;
13     private Animator personAnimator;
14     private CharacterController cc;
15 
16     public bool isJump;
17     private bool isMove;
18 
19     private CollisionFlags flags;
20 
21     private Vector3 moveDirection;
22 
23 
24     // Use this for initialization
25     void Start()
26     {
27         if (this.gameObject.tag == "Player")
28         {
29             isMainPlayer = true;
30             cc = this.GetComponent<CharacterController>();
31         }
32         personAnimator = gameObject.GetComponent<Animator>();
33     }
34 
35     // Update is called once per frame
36     void Update()
37     {
38         //如果当前脚本的对象是游戏者
39         if (isMainPlayer)
40         {
41             //Press Arrow keys tp move or rotate
42             float h = Input.GetAxis("Horizontal");
43             float v = Input.GetAxis("Vertical");
44             h *= Time.deltaTime * moveSpeed;
45             v *= Time.deltaTime * moveSpeed;
46             transform.Translate(h, 0, v);
47             transform.Rotate(0, h * rotateSpeed, 0);
48 
49             //FIX THIS BUG:Can not move backwards!Its animation only have the forward one
50             if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1f)
51             {
52                 personAnimator.SetFloat("Speed_f", moveSpeed);
53             }
54 
55             else
56             {
57                 personAnimator.SetFloat("Speed_f", 0);
58             }
59 
60 
61 
62 
63             //press space key to jump
64             //here are 2 types of jump ways:standing jumpand running jump
65             if (Input.GetKeyDown(KeyCode.Space) && !isJump)
66             {
67                 personAnimator.SetBool("Jump_b", true);
68 
69                 isJump = true;
70                 moveDirection = transform.TransformDirection(moveDirection);
71                 moveDirection.y = jumpSpeed;
72 
73             }
74             else if (Input.GetKeyUp(KeyCode.Space))
75             {
76                 personAnimator.SetBool("Jump_b", false);
77             }
78 
79             //if (isJump)
80             ///{
81             //simulate the fall physic
82             moveDirection.y -= gravity * Time.deltaTime;
83             flags = cc.Move(moveDirection * Time.deltaTime);
84 
85             //when hit the ground
86             if (flags == CollisionFlags.Below)
87             {
88                 isJump = false;
89             }
90             // }
91         }
92 
93     }
94 }

 

 

now we can control the player by press arrow buttons and space to jump.

[Unity3d]How to control your player to move and rotate by using CharacterController

标签:

原文地址:http://www.cnblogs.com/sc2015/p/5545092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!