unity跑酷游戏(源码)

包括:触发机关,

优化

fog的调试

效果

碰到障碍物游戏时间暂停(挂载到障碍物上)

上面需要有碰撞体

游戏物体上需要有标签

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Barrier : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.tag=="Player")
        {            
            Debug.Log("碰到障碍物"+ gameObject.name);
            //游戏时间流动变为0
            Time.timeScale = 0;
        }      
    }
}

结束游戏后跳出游戏结束界面

然后场景跳转

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class EndGamePoint : MonoBehaviour
{
    [SerializeField] private GameObject canvas;
    private void OnTriggerEnter(Collider other)
    {
        if(other.tag == "Player")
        {
            canvas.SetActive(true);
            SceneManager.LoadScene("Suntail Village");
        }
    }
}

升降机关

需要触发器,挂载到触发器上

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SocialPlatforms;

public class LiftingMechanism : MonoBehaviour
{
   [SerializeField] private GameObject door;  // 要移动的对象
    private float moveDistance = 2.0f; // 门上升的距离
    private float moveSpeed = 10.0f; // 门移动的速度

    private Vector3 initialPosition;//对象的初始位置
    private bool isMoving = false;

    void Start()
    {
        if (door != null)
        {
            initialPosition = door.transform.position;
        }
        if(door==null)
        {
            Debug.LogError("没拖入升降门"); 
        }
    }

    void Update()
    {
        if (isMoving)
        {
            Vector3 targetPosition = initialPosition + new Vector3(0, moveDistance, 0);
            door.transform.position = Vector3.MoveTowards(door.transform.position, targetPosition, moveSpeed * Time.deltaTime);

            if (door.transform.position == targetPosition)
            {
                isMoving = false; // 停止移动
            }
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            isMoving = true;
        }
    }
}

挂载到玩家上

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerBallRunControl : MonoBehaviour
{
    [SerializeField]private float speed =10f;
    [SerializeField] private float turnSpeed = 4f;

    void Update()
    {
        //按下R重新开始游戏
        if(Input.GetKeyDown(KeyCode.R))
        {
            //重新加载场景
            SceneManager.LoadScene(0);
            //不要重新加载音乐
            Time.timeScale = 1;
            return;
        }
        float z = Input.GetAxis("Horizontal");
        transform.Translate(speed * Time.deltaTime, 0,-z*turnSpeed*Time.deltaTime);
        //玩家落下到地面下20点的位置结束游戏
        if(transform.position.y<-20)
        {
            Time.timeScale = 0;
        }

        //屏幕动态旋转效果
        //获取主摄像机的变换组件
        var c=Camera.main.transform;
        //获得摄像机当前的旋转角度
        Quaternion cur = c.rotation;
        //将当前的旋转角度加上跟输入有关的角度(沿y轴旋转)
        Quaternion target=cur*Quaternion.Euler(0, z * 0.05f,0);
        //球形插值
        Camera.main.transform.rotation = Quaternion.Slerp(cur, target, 1.5f);

    }
}
相关推荐
2501_9387739926 分钟前
《资源预加载策略:LayaBox 小游戏引擎资源池架构设计案例分析》
游戏引擎
UWA13 小时前
为什么Android游戏画面在30帧运行时有抖动现象
android·游戏
Python私教13 小时前
Unity 游戏开发「工业化级」学习路线 2025 版
学习·unity·游戏引擎
软件开发技术深度爱好者17 小时前
python使用Pygame库实现避障小人行走游戏
python·游戏·pygame
于小汐在咯18 小时前
【Unity每日一记】Unity物理引擎:刚体与碰撞体详解
unity·游戏引擎
鱼蛋-Felix1 天前
Unity jar更新不生效怎么解决
unity·游戏引擎·jar
星空露珠1 天前
数独生成题目lua脚本
数据结构·数据库·算法·游戏·lua
wanhengidc1 天前
云手机 基于云计算的虚拟手机
运维·服务器·游戏·智能手机·云计算
爱吃小胖橘1 天前
Unity资源加载模块全解析
开发语言·unity·c#·游戏引擎
井队Tell1 天前
打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第九天)
学习·3d·unity