跑酷游戏制作笔记
2014.9.5
学了unity有一段时间了。想想也是要多锻炼自己的编程功夫了。开始想做rpg的游戏。不过感觉应该耗时会有点久。现在时间又有点紧,想想就还是先做跑酷的吧。之后有时间在做rpg的游戏。
跑酷类的我没有看过相关的教程什么的。所以不太清楚别人的是怎么开发的。我现在也有一些开发的思路。大神们如果看到我的有什么错误欢迎提出来。不过就不要喷我了。。我毕竟也是一个新手。就打算写点东西留着,以后在碰到相关的也可以有个资料查询下。
说了半天了。都没有一点有用的。好吧。现在开始正式进入话题!
这是我先创建的一个场景。下面的是两个cube主要我是拿cube当路了。毕竟自己不是美工。。自己做路比较费劲的。就请原谅哈。。。
好的。我这个人物是从网上下来的。网上有很多可爱的模型的。基本都可以用的。
我把创建场景带的主摄像机放到这个模型里了。也就是让这个模型当这个相机的父类。
这么做的原因是可以让这个主摄像机一直跟随角色运动。至于那些摄像机相关的脚本我还真的不太会。可能以后碰到相关的我在研究吧。
我做人物的方式和别人的有些不同。我现在也不清楚到底哪个方式好。有些人是给模型添加刚体和碰撞器之后同过rigidbody.velocity 这个给物体一个方向的力。但是我有时候用不好。之后看到一个方式。是给模型添加角色控制器(CharacterController),
我的模型下面添加的东西:
如图:
**当你给模型添加好characterController 后物体是不会受重力影响的。也就是说物体会在空中无法落到你添加的cube上的。这个时候就要开始写代码了。
我属性方面的声明上我就是以后用的什么在添加什么了。第一次打算写一个完整的游戏。思路不太清晰的。。请各位见谅
#region 属性
Private float speed = 3;//速度
public int TabRun ;//切换跑,冲刺,跳
private Vector3 moveDirection = Vector3.zero;
private int jumpSpeed = 3;//跳跃
private float gravity = 10.0f;
private boolm_panduanjump = true;
public intdisplacement = 0;//左右位移
#endregion
Ps:#region ……#endregion这个可以把包围在内的代码缩小。看着也会整齐很多的。
#region 对象
public Transform m_transform; //自己的对象
private CharacterController m_controller;//角色控制器
private Animation m_animation;//动画组件
#endregion
#region 动画
private string m_run = "run";//跑
private string m_sprint ="sprint";//冲刺
private string m_jump = "jump";//跳
#endregion
动画这里我就先在最前面定义了。感觉这样定义好了。以后用的时候看着也会很方便的。因为感觉有时候网上下的资源,动画的名字千奇百怪。。
Void Start(){
m_transform =this.transform;// 这里先给transform赋值。听说这样会省资源
m_controller =GetComponent
m_animation =GetComponent
}
下面就是这个角色脚本的最主要的了。移动脚本
#region //角色移动
///
/// TabRun 是整数类型 通过这个类型的值判断是跑,冲刺还是跳。
/// 这里还会判断左右位移
///
void Move() {
Vector3 m_forward =m_transform.TransformDirection(Vector3.forward);
#region 判断跑,冲刺,跳
//判断跑,冲刺,跳
switch (TabRun) {
case 1:
m_animation.CrossFade(m_run);
m_controller.SimpleMove(m_forward * speed);
break;
case 2:
m_animation.CrossFade(m_sprint);
m_controller.SimpleMove(m_forward * speed);
break;
case 3:
if(m_controller.isGrounded)
{
if(m_panduanjump)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));
//moveDirection = transform.TransformDirection(moveDirection);
//moveDirection *= speed;
moveDirection = m_forward * speed;
m_animation.CrossFade(m_jump);
moveDirection.y = jumpSpeed;
//m_controller.SimpleMove(m_forward * speed);
m_panduanjump = false;
}
else {
TabRun= 1;
m_panduanjump = true;
}
}
moveDirection.y-= gravity * Time.deltaTime;
m_controller.Move(moveDirection * Time.deltaTime);
break;
}
#endregion
#region 判断左右位移
//判断左右位移
switch(displacement){
case -1:
if(displacement ==-1)
{
m_transform.position=new Vector3(-0.83f,m_transform.position.y, m_transform.position.z);
displacement = 2;
}
break;
case 0:
if(displacement == 0) {
m_transform.position=new Vector3(0,m_transform.position.y,m_transform.position.z);
displacement = 2;
}
break;
case 1:
if(displacement == 1) {
m_transform.position=
newVector3(0.67f,m_transform.position.y,m_transform.position.z);
}
break;
}
#endregion
}
#endregion
第一天的做好了。明天开始做跑到的无限循环。。打算都做好了后。在看看网上的跑酷教程。看看自己有什么不足的要改进的。