查看: 2504|回复: 54

[基础] Unity3D 第四课 用键盘控制你的角色吧

[复制链接]

27

主题

17

听众

509

积分

大学生

Rank: 3Rank: 3

升级   0.6%

发表于 2013-3-4 22:54 |显示全部楼层
共享资源获取更多积分!share your resources get more credits!
资源信息 Tutorial Information
教程名称: Unity3D 第四课 用键盘控制你的角色吧(发布原创教程可获得更多积分哦!)
适用引擎: (资源适用引擎)
教程语种: 中文
教程等级: 小白(等级越高教程越难,但能学到的东西越多)
教程格式: 图文(请用IE9以上浏览器访问本版块)
教程作者: 转载自互联网 (如有问题请短消息联系作者或发表回复)
点击查看原图 --> 美丽分割线
回复可见
哇伊~ (((‵□′))回复太烦了,怒买VIP(充值金额将用于论坛采购更多资源)

--> 请先登录 --> 请先登录 --> 请先登录 --> 请先登录 --> 请先登录 --> 请先登录 -->
Unity3D 第四课 亲 …用键盘控制你的角色吧
这次我们要用到之前的MouseLook.cs
然后在加入一个角色控制类,我们把这个类命名为PlayController,角色控制类,
首先我们要定意人物的4个方向,如下代码
  •         //人物行走的4个方向
  •         public const int PLAY_UP = 0;
  •         public const int PLAY_RIGHT = 1;
  •         public const int PLAY_DOWN = 2;
  •         public const int PLAY_LEFT = 3;

复制代码

初始化速度,当前状态,
  • //人物移动的速度
  •         private int moveSpeed = 10;
  •         //记录当前人物的状态
  •         private int gameState = 0;


复制代码

获取按钮,这里我们用W,S,A,D,大众化游戏的操控undefined
  • //获取按钮A
  • Input.GetKey(KeyCode.A)

复制代码

以下各个按钮直接KeyCode.*;      注:*代替各个按钮
  • //初始化当前状态
  • void Awake ()
  • {
  •         gameState = PLAY_DOWN;
  • }

复制代码

移动方法
  •          public void setGameState(int newState)
  •         {
  •                 //根据当前模型方向一上一次备份的方向计算出模型的角度
  •                 int rotareValue = (newState - gameState) * 90;
  •                 Vector3 transFormValue = new Vector3();
  •                 //模型移动的数值
  •                 switch(newState)
  •                 {
  •                         case PLAY_UP:
  •                                 transFormValue = Vector3.forward * Time.deltaTime;
  •                                 break;
  •                         case PLAY_DOWN:
  •                                 transFormValue = (-Vector3.forward) * Time.deltaTime;
  •                                 break;
  •                         case PLAY_LEFT:
  •                                 transFormValue = Vector3.left * Time.deltaTime;
  •                                 break;
  •                         case PLAY_RIGHT:
  •                                 transFormValue = (-Vector3.left) * Time.deltaTime;
  •                                 break;
  •                 }
  •                 //模型旋转
  •                 transform.Rotate(Vector3.up ,rotareValue);
  •                 //移动人物
  •                 transform.Translate(transFormValue * moveSpeed,Space.World);
  •                 gameState = newState;
  •         }

复制代码

好了以下帖出全部代码:
  • using UnityEngine;
  • using System.Collections;
  • public class PlayController: MonoBehaviour
  • {
  •         //人物行走的4个方向
  •         public const int PLAY_UP = 0;
  •         public const int PLAY_RIGHT = 1;
  •         public const int PLAY_DOWN = 2;
  •         public const int PLAY_LEFT = 3;
  •         //记录当前人物的状态
  •         private int gameState = 0;
  •         //人物移动的速度
  •         private int moveSpeed = 10;
  •         void Awake ()
  •         {
  •                 gameState = PLAY_DOWN;
  •         }
  •         void Update ()
  •         {
  •                 KeyMover();
  •         }
  •         void KeyMover()
  •         {
  •                 if(Input.GetKey(KeyCode.A))
  •                 {
  •                         setGameState(PLAY_LEFT);
  •                 }
  •                 else if(Input.GetKey(KeyCode.D))
  •                 {
  •                         setGameState(PLAY_RIGHT);
  •                 }
  •                 else if(Input.GetKey(KeyCode.S))
  •                 {
  •                         setGameState(PLAY_DOWN);
  •                 }
  •                 else if(Input.GetKey(KeyCode.W))
  •                 {
  •                         setGameState(PLAY_UP);
  •                 }
  •         }
  •          public void setGameState(int newState)
  •         {
  •                 //根据当前模型方向一上一次备份的方向计算出模型的角度
  •                 int rotareValue = (newState - gameState) * 90;
  •                 Vector3 transFormValue = new Vector3();
  •                 //模型移动的数值
  •                 switch(newState)
  •                 {
  •                         case PLAY_UP:
  •                                 transFormValue = Vector3.forward * Time.deltaTime;
  •                                 break;
  •                         case PLAY_DOWN:
  •                                 transFormValue = (-Vector3.forward) * Time.deltaTime;
  •                                 break;
  •                         case PLAY_LEFT:
  •                                 transFormValue = Vector3.left * Time.deltaTime;
  •                                 break;
  •                         case PLAY_RIGHT:
  •                                 transFormValue = (-Vector3.left) * Time.deltaTime;
  •                                 break;
  •                 }
  •                 //模型旋转
  •                 transform.Rotate(Vector3.up ,rotareValue);
  •                 //移动人物
  •                 transform.Translate(transFormValue * moveSpeed,Space.World);
  •                 gameState = newState;
  •         }
  • }

复制代码

小技巧:按键的获取方法2
  •                 float KeyVertical = Input.GetAxis("Vertical");
  •                 float KeyHorizontal = Input.GetAxis("Horizontal");
  •                 if(KeyVertical == -1)
  •                 {
  •                         setGameState(PLAY_LEFT);
  •                 }
  •                 else if(KeyVertical == 1)
  •                 {
  •                         setGameState(PLAY_RIGHT);
  •                 }
  •                 if(KeyHorizontal == 1)
  •                 {
  •                         setGameState(PLAY_DOWN);
  •                 }
  •                 else if(KeyHorizontal == 1)
  •                 {
  •                         setGameState(PLAY_UP);
  •                 }

复制代码

这样也是能获取按钮的哦…
大家结合之前的MouseLook,试试,是不是很NX哇……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

楼主热帖
已有 2 人评分鲜花 收起 理由
1287537617aa + 1
aa1287537617 + 1

总评分: 鲜花 + 2   查看全部评分

1

主题

9

听众

202

积分

小学生

Rank: 2

升级   0.67%

发表于 2013-4-8 09:02 |显示全部楼层
请问这个和UNITY自带的控制代码有什么优点吗
回复

使用道具 举报

1

主题

10

听众

201

积分

小学生

Rank: 2

升级   0.33%

发表于 2013-4-14 17:51 |显示全部楼层
Unity3D 第四课 用键盘控制角色
回复

使用道具 举报

1

主题

9

听众

201

积分

小学生

Rank: 2

升级   0.33%

发表于 2013-5-11 04:35 |显示全部楼层

感谢楼主的无私分享!
回复

使用道具 举报

1

主题

10

听众

200

积分

小学生

Rank: 2

升级   0%

发表于 2013-5-22 13:01 |显示全部楼层
大哥 ,这样子是没有碰撞的啊!
回复

使用道具 举报

9

主题

19

听众

839

积分

大学生

Rank: 3Rank: 3

升级   22.6%

发表于 2013-7-13 04:21 |显示全部楼层

膜拜中。。。。
回复

使用道具 举报

0

主题

9

听众

200

积分

小学生

Rank: 2

升级   0%

发表于 2017-4-9 12:06 |显示全部楼层
楼主是超人
回复

使用道具 举报

0

主题

9

听众

205

积分

小学生

Rank: 2

升级   1.67%

发表于 2017-4-9 12:28 |显示全部楼层
好帖就是要顶
回复

使用道具 举报

0

主题

9

听众

200

积分

小学生

Rank: 2

升级   0%

发表于 2017-4-9 12:45 |显示全部楼层
顶顶多好
回复

使用道具 举报

0

主题

9

听众

201

积分

小学生

Rank: 2

升级   0.33%

发表于 2017-4-9 12:36 |显示全部楼层
真心顶
回复

使用道具 举报

温馨提示:求助请到“Unity技术讨论”版块中发帖,便于集中解决!
您需要登录后才可以回帖 登录 | 立即注册

懒人模式:

关闭

站长推荐 上一条 /1 下一条

Unity3D游戏开发联盟(资源共享平台) -Unity3D,Unreal ( 苏ICP备12051100号 )   

GMT+8, 2018-9-21 20:45 , Processed in 0.171830 second(s), 83 queries .