基于Unity Standard Assets的Characters资源包实现自定义第一人称控制

导入package,使用FPS预置件,在FPSController上添加Contronller.cs脚本


1. 鼠标hover到按钮上会变成小手

a).导入一张cursor的图片,将该图片的texture type改为Cursor

如果将texture type改为Sprite(2D and UI),也可以实现,但是console会报错

b).想要实现将鼠标位置移动到相应的3d模型上就改变其样子,可以通过射线检测,当相触物体的tag是operator的话,鼠标会变成小手的样子。

Controller.cs中更换鼠标外观API

c). 因为上面这个函数是放在update函数中的,所以不知道一直在做射线检测会不会很影响性能

运行结果

2. 鼠标控制旋转方向时,可以让鼠标一直保持在屏幕的中间

在unity中,提供了锁定光标在中心的方法,但是这个光标会hidden起来。

unity提供的锁定光标方法

使用FPS预置件的时候,在MouseLook.cs脚本中封装了这个方法,可以通过调用MouseLook.SetCursorLock(bool value)来改变此时是否锁定光标。如果value为true,通过escape按键可以临时解除锁定光标,但是不能进行鼠标的click操作,因为按下鼠标又会变成锁定光标模式。如果value为false,能够实现永久的解除光标锁定。

一次错误尝试

在加载在FPSController上面的Controller.cs文件中,我使用了上面的一段代码准备切换mouselock的状态,在debug过程中,代码都run进去了,但是却没有效果。

那是因为mouselook是我new的一个新对象,这个对象和挂载在FPSController上面的mouselook并不是同一个对象。所以必须获取到这个mouselook对象,但发现在FirstPersonController.cs中,MouseLook对象是private的,为此,可以将其改成public(不推荐),或者如下,增加在FirstPersonController.cs中

获取private的对象方法

然后在Controller.cs中获取

Controller.cs中获取mouselook对象

你可能感兴趣的:(基于Unity Standard Assets的Characters资源包实现自定义第一人称控制)