内容简介:在前面介绍了地面与角色的关系,通过坐标就可以解决角色不入地的问题。但是如果在场景里有多个物器,比如桌子、台等等,这些物品大小不一样,因此距离也不一样,就不能通过固定设置来达到穿墙而过了,那么怎么办呢?本文就来解决这个问题,在场景里创建几个立方体,按如下摆放:创建的物体,都需要把y轴的坐标设置为1,这时就刚刚好在地面之上。其它坐标随意设置即可,大体看起来像上图这样就可以。当然,它的大小你也可以看着顺眼的方式来设置,这都没有太大关系,做完这些设置之后,我们按下play来运行一下,就会发现如下图一样,角色可以进
在前面介绍了地面与角色的关系,通过坐标就可以解决角色不入地的问题。但是如果在场景里有多个物器,比如桌子、台等等,这些物品大小不一样,因此距离也不一样,就不能通过固定设置来达到穿墙而过了,那么怎么办呢?本文就来解决这个问题,在场景里创建几个立方体,按如下摆放:
创建的物体,都需要把y轴的坐标设置为1,这时就刚刚好在地面之上。其它坐标随意设置即可,大体看起来像上图这样就可以。当然,它的大小你也可以看着顺眼的方式来设置,这都没有太大关系,做完这些设置之后,我们按下play来运行一下,就会发现如下图一样,角色可以进入立方体的障碍物里,这跟现实世界里,人不能穿过桌子的现象不符合啊,又要怎么样来修改呢?是否感觉到有点头痛了?其实不用担心,因为unity已经为我们考虑这些问题了,需要使用碰撞检测解决。
不过,仔细的读者,也许会发现这个角色已经有一个collider组件,这个组件是干什么用呢?其实这个组件就是用来碰撞检测的,如果再检查一遍里所有物体都自动带有这个组件,自然就不会出上面的这个问题?难道见鬼了。其实不是,在unity里要实现碰撞检测,不能用使用transform变换来实现,意思就是说,使用这个组件来改变位置和大小,并不会应用碰撞检测系统的功能,因此,必须使用其它 工具 来实现这个碰撞检测。这个工具就叫做角色控制器 Character Controller。 那么接着下来先把角色这个collider删除掉,如下图:
接着添加下面的组件:
经过这样操作之后,就可以添加character controller了,如下:
由于添加了这个组件,那么脚本代码里,也需要修改一下,才可以使用这个组件,把代码修改如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BasicMovement : MonoBehaviour {
public float speed = 10.0f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
Vector3 input = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
//transform.position += input * speed * Time.deltaTime;
gameObject.GetComponent<CharacterController>().Move(input * speed * Time.deltaTime);
}
}
在代码里,要使用character controller,就需要使用函数gameObject.GetComponent,gameobject是一个对象,指的是这个脚本所附着的游戏物件,也许你会发现还有一个叫Gameobject类,它是制造gameobject的母体,它是一个类别,gameobject是一个个体,一个实际的人。接着使用GetComponent函数,它有一个尖括号把类型CharacterController引用,这是使用类型定义,这里是获取这种类型的组件,由于绑定这个脚本只有一个这样的组件,就可以使用了。如果不存在,就会返回null。因此,gameObject.GetComponent<CharacterController>(),就是获取到角色控制组件,然后调用它的方法Move进行移动,这样当碰到其它物体,就不会再移动过去,达到碰撞检测的功能。
character controller
角色控制器可以让你更容易的处理有有碰撞的运动,同时不用处理刚体。(也就是说角色控制器负责处理角色的移动,如果添加角色控制器,就不用在添加刚体组件)。 角色控制器不受力的影响,并且只有当你调用move函数时才会移动。他的运动收碰撞的约束。
到这里,就完成了碰撞检测了,运行一下,可以看到遇到障碍物就停下来了,如下图:
最后,你可以愉快地玩耍这个游戏了,不用担心再上天入地。
跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
在Windows下SVN的版本管理与实战
http://edu.csdn.net/course/detail/2579以上所述就是小编给大家介绍的《游戏制作之路(7)角色与物品之间的碰撞》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- LeetCode (735):行星碰撞
- 哈希碰撞与生日攻击
- 使用 getImageData 实现碰撞检测
- 从生日悖论谈哈希碰撞
- OpenGL 碰撞检测之 AABB 包围盒
- Html5 Canvas动画基础(碰撞检测)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developing Large Web Applications
Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99
As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!