unity制作类似神庙逃亡控制效果(手势检测)

前几天突然有兴趣了解一下手游相关的开发 刚开始完全没有头绪,然后慢慢了解了一些知识后,决定尝试写一个类似于神庙逃亡的游戏效果

1.准备工作

先导入素材 (官方商店里边的)机器人素材 带有跑步动作 在Animator中把跑步动画设为默认即可
搭建场景 这里我没有做什么地图 就是一个大的Plane
给Robot添加刚体和碰撞体 设置合理的大小
在神庙逃亡中摄像头必须跟随玩家的移动(由于玩家受重力的影响)我给摄像头添加一个和玩家相同的移动速度

2.代码

1.摄像机脚本

首先是摄像头脚本`

 	public GameObject Player;//玩家
    public float UpDis = 5;//数值方向偏移量
    public float AwayDis = 5;//水平方向偏移量
    public float smooth = 3;//顺滑度
    private Vector3 Targetposition;//目标位置

    private void Update()
    {
        Targetposition = Player.transform.position + UpDis * transform.up - AwayDis * Player.transform.forward; 
        //实现摄像头和玩家之间的距离
        transform.position = Vector3.Lerp(transform.position, Targetposition, Time.deltaTime * smooth);
        //实现可以平滑的移动摄像头
        transform.LookAt(Player.transform);
    }

在这大致介绍一下Vector.lerp(a,b,time); 大致意思是a位置到b位置 以time的顺滑度变化(纯属个人理解)
transform.LookAt(Gameobject);旋转自身,使得当前对象的指向目标对象Gameobject所在的位置。
这样实现了摄像头跟随玩家的效果了

2.玩家脚本

private float GravitySpeed = 5;//重力感应速度
    private float Direct;//控制旋转方向

    private Vector3 BeginPos;//开始位置

   
    private void Update()
    {
        Touch();
        transform.Translate( Vector3.forward* Time.deltaTime * 5);
        Vector3 dir = Vector3.zero;//初始化坐标
        dir.x = Input.acceleration.x;//获取重力感应效果
        transform.Translate(dir * Time.deltaTime * GravitySpeed);
        transform.rotation = Quaternion.Euler(0, Direct, 0);
    }

    private void Touch()//检测手势检测
    {
        if (Input.touchCount < 1)//触摸屏幕点小于1个
        {
            return;
        }
        else if (Input.touchCount == 1)//触摸屏幕为1
        {
            if(Input.GetTouch(0).phase == TouchPhase.Began)//开始滑动的点
            {
                BeginPos = Input.GetTouch(0).position;//给BeginPos赋值(开始滑动的点的坐标)
            }
        }
        if(Input.GetTouch(0).phase ==TouchPhase.Ended&&Input.GetTouch(0).phase != TouchPhase.Canceled)
        //滑动结束(手抬起)并且没有取消对触摸的追踪
        {
            Vector2 pos = Input.touches[0].position;//给pos赋值为滑动结束的坐标
            if (Mathf.Abs(BeginPos.x - pos.x) > Mathf.Abs(BeginPos.x - pos.y))
            //左右滑动的影响大于上下滑动
            {
                if (BeginPos.x > pos.x)//左滑
                {
                    Direct -= 90;
                }
                else //右滑
                {
                    Direct += 90;
                }
            }
            else//上下滑动影响大于左右
            {
                if (BeginPos.y < pos.y)//向上
                {
                    float timer = 0;//设置跳跃间隔(防止出现连续跳)
                    if (timer >= 2)
                    {
                        transform.Translate(new Vector3(0, 1, 0) * Time.deltaTime * 150);
                    }
                    else
                    {
                        timer += Time.deltaTime;
                    }
                }
            }
        }
    }

注释写的比较明确了
然后我说一下Mathf.Abs 是取绝对值的函数
然后添加给玩家即可

3.导入到手机

导入到手机即可运行了
我们会发现和神庙逃亡一样的游戏效果
左右滑动旋转 手机重力感应移动方向
我们也可以随着时间的变化 给变人物移动的速度
差不多就这么多

如果有什么问题 可以联系我qq:1149293885

发布了52 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/102852589