![](https://csdnimg.cn/release/download_crawler_static/89429585/bg2.jpg)
2014.1.17
1.【角色移动】
首先打开 Unity3d,并创建一个新的工程,然后我导入了所用到包:场景,角色模型,以及
DaikonGUI(现在重新做游戏的话,GUI 就不用系统自带的了,这里改用 DaikonGUI)的包。然后新建了
_Scene、_GUI 和_Player 三个文件夹,并将刚开始导入的资源包移动进去,以便后来区分。
如图:
接下来在场景中建立一块地形,并将其大小设置为 100*100:
接下来就可以使用导入的场景资源包进行地形的描绘了。不过,这里我先不进行地形之类的具体创建,毕
竟这都是细节,目前应该先解决角色控制方面的问题,如图,先将先前导入的角色模型拖入场景中:
![](https://csdnimg.cn/release/download_crawler_static/89429585/bg3.jpg)
初一看来,是不是好像人物的比例有些不对,似乎太小了些?
所以可以在角色旁边随便创建一个立方体,比较一下:
这个确实大了些,于是对比着场景中的角色,在 Inspector 面板中进行调整,比例大概在 0.15 的样子刚好
合适:
![](https://csdnimg.cn/release/download_crawler_static/89429585/bg4.jpg)
觉得差不多了,就可以选中导入人物的所有模型,并将 Scale Factror 都设置为 0.15。将一同导入的有动
画的模型比例也设置为 0.15 是必须的,因为如果忘记设置动画模型比例的话,播放动画就会造成人物变形。
接下来创建一个新文件夹,并将名字重命名为_Script,这里将存放接下来游戏中所用到的所有脚本。最开
始当然是创建一个控制人物的脚本啦,那么现在就在_Script 文件夹下创建一个 C#脚本,就命名为
“PlayerControl”吧。然后双击脚本文件进入 Mono 编辑器中,系统已经默认生成了一些代码,删除不
必要的注释后,在代码最开始分别添加上人物的各个属性,这些一开始就可以定义好:
using UnityEngine;
using System.Collections;
public class PlayerControl : MonoBehaviour {
#region 人物属性
public string m_name="CWH";//名字,以后看可以让玩家自己取名字的
public int m_experience=0;//这是经验,将会是隐性的属性,也就是说在玩家眼中是不可见的。原
来的版本没有,这次重新做的话,还是决定加进去。
public int m_maxLife=100;//生命
public int m_currentLife=100;//当前生命
public int m_maxMagic=50;//魔法值
public int m_currentMagic=50;//当前魔法值
public int m_defense=10;//防御力
public int m_attack=20;//攻击力
public int m_speed=3;//速度
public int m_rotateSpeed=180;//旋转速度
#endregion
#region 对象
public Transform m_transform;//定义一个自己的对象,据说有好处。
private CharacterController m_controller;//定义角色控制器
#endregion
void Start ()
{
![](https://csdnimg.cn/release/download_crawler_static/89429585/bg5.jpg)
m_transform=this.transform;
m_controller=GetComponent<CharacterController>();
}
void Update ()
{
}
}
然后在最下方添加一个 Move 函数,以作为对角色的移动等的控制:
void Move()
{
if(Input.GetKey(KeyCode.A))//以键盘上的 A 键控制角色向左旋转,注意向左旋转的话,
rotateSpeed 是为负的。
{
m_transform.Rotate(m_transform.up*-m_rotateSpeed*Time.deltaTime);
}else if(Input.GetKey(KeyCode.D))//以键盘上的 D 键控制人物向右旋转
{
m_transform.Rotate(m_transform.up*m_rotateSpeed*Time.deltaTime);
}
}
这次我准备使用 CharactorController 控制角色,旋转的方式写完了,那么移动的方式该怎么判断呢?毕
竟角色必须能够前后移动才行。于是想想可以定义一个中间变量,按 W 键为前,将其置为 1,按 S 键位后,
将其置为-1,然后在使用 CharactorController 中的 SimpleMove 函数时(使用角色控制器的话,只能使
用其自带的 SimpleMove 或 Move 函数进行移动,否则无法产生碰撞,当初在这一点上折腾了好久才明
白过来......),可以用速度乘以这个中间变量,那么最后的移动不就可以分前后了么?
所以就在最前面紧接着”对象“后面,定义一堆存放变量的地方,并将移动方向 m_moveDirection 变量
定义好:
#region 变量
private int m_moveDirection=-1;//这个是属于临时变量,用于判断移动方向的
#endregion
然后在 Move 函数中定义一个 Vector3 来存储向前移动的方向:
Vector3 m_forward=m_transform.TransformDirection(Vector3.forward);
在 Move 函数中加入按下 W 键和 S 对移动方向的判断后,在最后使用 SimpleMove 函数就可以控制角色
的移动了。
这样,将这个脚本赋给场景中的角色,并为角色添加一个角色控制器以后,按下 W 间就可以向前移动,按
下 S 键就会向后移动。