游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7494|回复: 9

【Unity3D实战项目:疯狂杀戮】角色模型的行走控制(一)

[复制链接]

2

主题

5

帖子

26

积分

注册会员

Rank: 2

积分
26
QQ
发表于 2013-1-24 11:44:09 | 显示全部楼层 |阅读模式
【Unity3D实战项目:疯狂杀戮】角色模型的行走控制(一)作者:Houzi
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网,谢谢!

今天正式开始了第一个实战项目【疯狂杀戮】的开发教程,在教程中我会讲解整个游戏的开发过程,整个开发过程是建立在你已经基本明白了最基本的地形操作和一些基本API的使用。

我选的项目第一篇教学是控制角色的移动,这是最基本的游戏控制。

OK,开场白结束,开始咯~

第一步:简单场景的搭建:
1、首先请打开Unity,新建一个Unity工程。
2、新建的工程默认会加入Main Camera,我们加入一个地形Terrain,Terrain->create Terrain。
这时你发现场景都是黑黑的,我们在加一个方向光光源(可以理解成太阳)Directional light,选中工程的Hierarchy面板,Create->Directional light。
3、导入角色模型文件,可以直接把模型人物文件复制到工程的Assets目录下,Unity会自己刷新并加载模型文件。
4、在Project面板,选中我们导入的模型文件,拖拽到Scene场景中,并调节好位置,起码让自己能看到它在哪。

OK,一个最简单的场景搭建完毕。
Scene面板:
Hierarchy面板、Project面板:
第二步:脚本控制角色移动:
1、选中Project面板,新建一个文件夹Create->Folder,命名为MyScript,这个文件夹用来存放我们自己写的脚本文件。良好的编程习惯还是需要滴…
2、选中MyScript文件夹,Create->C# Script,命名为BarbariansControl。当然你也可以使用js脚本。API都是一样的。
3、双击打开创建的BarbariansControl脚本文件,Unity会默认使用MomoDevelop编辑器进行编辑。(你也可以选择使用自己熟悉的IDE)。
4、代码的编写:

Unity对新建的文件会自动创建一些函数。

最常见的Update,系统每一帧都会自己调用。(点击查看更多详细介绍)
代码:

01using UnityEngine;

02using System.Collections;

03  

04public class BarbariansControl : MonoBehaviour {

05  

06 public const int HERO_UP= 0;

07 public const int HERO_RIGHT= 1;

08 public const int HERO_DOWN= 2;

09 public const int HERO_LEFT= 3;

10  

11public int state = 0;

12 public int moveSpeed = 10;

13  

14 public void Awake() {

15 state = HERO_UP;

16 }

17  

18 void Update () {

19  

20 float KeyVertical = Input.GetAxis ("Vertical") ;

21 float KeyHorizontal = Input.GetAxis ("Horizontal");

22  

23 if(KeyVertical == 1){

24 //up

25 setHeroState(HERO_UP);

26 }else if(KeyVertical == -1){

27 //down

28 setHeroState(HERO_DOWN);

29 }

30  

31 if(KeyHorizontal == 1){

32 //right

33 setHeroState(HERO_RIGHT);

34 }else if(KeyHorizontal == -1){

35 //left

36 setHeroState(HERO_LEFT);

37 }

38  

39if(KeyVertical == 0 && KeyHorizontal ==0){

40 animation.Play();

41 }

42 }

43  

44 public void setHeroState(int newState) {

45 int rotateValue = (newState - state) * 90;

46 Vector3 transformValue = new Vector3();

47 animation.Play("walk");

48 switch(newState){

49 case HERO_UP:

50 transformValue = Vector3.forward * Time.deltaTime;

51 break;

52 case HERO_DOWN:

53 transformValue = -Vector3.forward * Time.deltaTime;

54 break;

55 case HERO_LEFT:

56 transformValue = Vector3.left * Time.deltaTime;

57 break;

58 case HERO_RIGHT:

59 transformValue = -Vector3.left * Time.deltaTime;

60 break;

61 }

62  

63 transform.Rotate(Vector3.up, rotateValue);

64 //move

65 transform.Translate(transformValue * moveSpeed, Space.World);

66  

67 state = newState;

68 }

69}




编写完毕后,回到Unity工程,选中Project面板中的BarbariansControl脚本文件,鼠标拖拽到Hierarchy面板中的角色模型上,进行脚本绑定。
OK,Run一个工程,看看效果:

注:
float KeyVertical = Input.GetAxis ("Vertical") ;
float KeyHorizontal = Input.GetAxis ("Horizontal");
这是利用Unity有的的输入管理器,获取水平和竖直方向。目前不清楚的可以先不用管,知道它的返回值1和-1可以表示上下和左右就可以了。后面我会介绍的。



0

主题

3

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2013-4-4 22:31:11 | 显示全部楼层
支持

0

主题

1

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2013-4-17 13:56:10 | 显示全部楼层
+1

0

主题

1

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2013-9-6 11:46:34 | 显示全部楼层
++

0

主题

5

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2013-11-20 13:31:57 | 显示全部楼层
好厉害啊!

0

主题

49

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2014-2-10 14:17:00 | 显示全部楼层
用transform来做移动,有时会出现很多问题,在加入刚体,重力后角色碰到物体有可能会倒下,反弹,角色会在环境中卡住,建意使用CharacterCtroller.

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2014-2-24 11:56:51 | 显示全部楼层
它的脚本很像JAVA啊

0

主题

3

帖子

43

积分

新手上路

Rank: 1

积分
43
发表于 2014-2-27 19:38:55 | 显示全部楼层
代码~~-00-

0

主题

17

帖子

2308

积分

金牌会员

Rank: 6Rank: 6

积分
2308
发表于 2017-9-24 00:22:17 | 显示全部楼层
谢谢楼主 d的。。。 分享

0

主题

17

帖子

2308

积分

金牌会员

Rank: 6Rank: 6

积分
2308
发表于 2017-10-15 09:42:00 | 显示全部楼层
不错  先占一个沙发  谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 18:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表