unity用方向键来控制角色上楼梯
来源:互联网 发布:汽车工作知乎 编辑:程序博客网 时间:2024/06/05 20:31
自动寻路可以实现角色自动到任意的地方,也可以上楼,可我希望通过方向键来实现角色的移动和上楼梯。可是不同的楼梯有不同的台阶高度,若给他设定一个固定的值。那么使用起来不方便,而且在判断上楼还是下楼时比较难,如何让角色在y轴上的移动随着下一步的高度来改变呢?
若是在复杂的地形中,或许我们可以用Terrain.activeTerrain.SampleHeight(transform.position);这个函数。
public class example : MonoBehaviour {
void LateUpdate() {transform.position.y = Terrain.activeTerrain.SampleHeight(transform.position);}}
然而楼梯等就不是地形里的了,要获取其他的物体的为位置,我们可以使用射线Ray。
origin 起点;
direction 方向;
GetPoint(float distance) 获取点(返回沿着射线在distance距离单位的点)
还有RaycastHit 光线碰撞器。用来获取碰撞后的信息反馈。
一般使用的是这个函数static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
若以碰撞提产生量交叉碰撞,返回true,或则返回false。
我们在使用时可以Physics.Raycast(Ray ray ,out hit); 用一个out变量来将它们都带回。
好了,接下来就是写移动的代码了,,我用的是第一人称角色,所以前进键来判断,,目前尚未添加后退键的判断代码,总之,那也是同理得的啦。
using System.Collections;using System.Collections.Generic;using UnityEngine;public class controlmove : MonoBehaviour {public float speed;public Vector3 RayOrigin;Ray ray;// Use this for initializationvoid Start () {speed = 1.0f;}// Update is called once per framevoid Update () { RayOrigin = new Vector3 (this.transform.position.x, this.transform.position.y , this.transform.position.z )+this.transform.up*2+this.transform.forward*speed;ray.origin = RayOrigin;ray.direction = new Vector3 (0, -1, 0);RaycastHit hit;if (Physics.Raycast (ray, out hit)) {Debug.DrawLine (ray.origin, hit.point, Color.red);}if (Input.GetKey (KeyCode.UpArrow)) {Debug.Log (hit.point);this.transform.Translate (0, -this.transform.position.y + hit.point.y, Time.deltaTime * speed);}if (Input.GetKey (KeyCode.DownArrow))this.transform.Translate (0, 0, -Time.deltaTime);if (Input.GetKey (KeyCode.LeftArrow))this.transform.Rotate (0, -1, 0);if(Input.GetKey(KeyCode.RightArrow))this.transform.Rotate(0,1,0);}}
这里要注意的问题是楼梯等要加上碰撞体,同时还要注意碰撞体的类型!!!
还有就是在确定rayorigin的时候,我们要让射线在我角色的正前方,不是简单的
RayOrigin = new Vector3 (this.transform.position.x, this.transform.position.y+2, this.transform.position.z +1);
不然得到的是一个世界坐标下的方向移动,在角色的转向过程中,不一定会在角色的正前方。应该用下面这个函数
RayOrigin = new Vector3 (this.transform.position.x, this.transform.position.y , this.transform.position.z )+this.transform.up*2+this.transform.forward*speed;
这样就完成了。
- unity用方向键来控制角色上楼梯
- 解决Unity方向键控制角色行走时,鼠标箭头会一直回到场景的中心点问题
- libgdx实现模拟方向键控制角色移动
- Unity 2D角色控制脚本C#直接上代码
- Unity 角色控制相关操作
- Unity 角色控制相关操作
- Unity 鼠标控制角色移动
- Unity实现第三人称角色控制
- Unity 碰撞检测,触发检测,方向键控制物体移动
- 利用方向键来控制一个猪字的移动。
- unity中简单的角色移动控制
- unity 如何控制摄像机跟随角色移动
- Unity 角色单步移动控制
- 【Unity&角色移动】代码控制重力
- unity学习手记之控制角色移动
- Unity使用EasyTouch虚拟摇杆控制角色
- Unity Player角色移动控制脚本实现
- Unity角色控制角色不穿过场景模型
- ToolBar使用详解
- 隐式转换与显示转换的区别概念理解
- Response
- mui与vue结合 功能网址
- HTML初识
- unity用方向键来控制角色上楼梯
- 关于C++ const 的全面总结
- MyBatis Generator 详解
- 自定义控件之 SubmitBotton (提交按钮)
- sort
- Java简单链表
- 如何删除数据库中的数据?
- Spring AOP 实现原理与 CGLIB 应用
- fmpeg 读取mp4 rtsp,存储为图片序列 ffmpeg 2017.08