游戏制作之路(7)角色与物品之间的碰撞

栏目: 后端 · 发布时间: 6年前

内容简介:在前面介绍了地面与角色的关系,通过坐标就可以解决角色不入地的问题。但是如果在场景里有多个物器,比如桌子、台等等,这些物品大小不一样,因此距离也不一样,就不能通过固定设置来达到穿墙而过了,那么怎么办呢?本文就来解决这个问题,在场景里创建几个立方体,按如下摆放:创建的物体,都需要把y轴的坐标设置为1,这时就刚刚好在地面之上。其它坐标随意设置即可,大体看起来像上图这样就可以。当然,它的大小你也可以看着顺眼的方式来设置,这都没有太大关系,做完这些设置之后,我们按下play来运行一下,就会发现如下图一样,角色可以进

在前面介绍了地面与角色的关系,通过坐标就可以解决角色不入地的问题。但是如果在场景里有多个物器,比如桌子、台等等,这些物品大小不一样,因此距离也不一样,就不能通过固定设置来达到穿墙而过了,那么怎么办呢?本文就来解决这个问题,在场景里创建几个立方体,按如下摆放:

游戏制作之路(7)角色与物品之间的碰撞

创建的物体,都需要把y轴的坐标设置为1,这时就刚刚好在地面之上。其它坐标随意设置即可,大体看起来像上图这样就可以。当然,它的大小你也可以看着顺眼的方式来设置,这都没有太大关系,做完这些设置之后,我们按下play来运行一下,就会发现如下图一样,角色可以进入立方体的障碍物里,这跟现实世界里,人不能穿过桌子的现象不符合啊,又要怎么样来修改呢?是否感觉到有点头痛了?其实不用担心,因为unity已经为我们考虑这些问题了,需要使用碰撞检测解决。

游戏制作之路(7)角色与物品之间的碰撞

不过,仔细的读者,也许会发现这个角色已经有一个collider组件,这个组件是干什么用呢?其实这个组件就是用来碰撞检测的,如果再检查一遍里所有物体都自动带有这个组件,自然就不会出上面的这个问题?难道见鬼了。其实不是,在unity里要实现碰撞检测,不能用使用transform变换来实现,意思就是说,使用这个组件来改变位置和大小,并不会应用碰撞检测系统的功能,因此,必须使用其它 工具 来实现这个碰撞检测。这个工具就叫做角色控制器 Character Controller。 那么接着下来先把角色这个collider删除掉,如下图:

游戏制作之路(7)角色与物品之间的碰撞

接着添加下面的组件:

游戏制作之路(7)角色与物品之间的碰撞

游戏制作之路(7)角色与物品之间的碰撞

经过这样操作之后,就可以添加character controller了,如下:

游戏制作之路(7)角色与物品之间的碰撞

由于添加了这个组件,那么脚本代码里,也需要修改一下,才可以使用这个组件,把代码修改如下:

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函数时才会移动。他的运动收碰撞的约束。

到这里,就完成了碰撞检测了,运行一下,可以看到遇到障碍物就停下来了,如下图:

游戏制作之路(7)角色与物品之间的碰撞

最后,你可以愉快地玩耍这个游戏了,不用担心再上天入地。

跟老菜鸟学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)角色与物品之间的碰撞》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Apache源代码全景分析第1卷

Apache源代码全景分析第1卷

2009-5 / 88.00元

《Apache源代码全景分析第1卷:体系结构与核心模块》是“Apache源代码全景分析”的第1卷。书中详细介绍了Apache的基础体系结构和核心模块的实现机制,包括配置文件、模块化结构、多任务并发,以及网络连接和请求读取,其中多任务并发体系结构是《Apache源代码全景分析第1卷:体系结构与核心模块》分析的重点,讨论了Prefork、Worker及WinNT三种MPM。《Apache源代码全景分析......一起来看看 《Apache源代码全景分析第1卷》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具