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);

    }
}
相关推荐
虾球xz2 小时前
游戏引擎学习第118天
学习·游戏引擎
软件黑马王子4 小时前
Unity游戏制作中的C#基础(6)方法和类的知识点深度剖析
开发语言·游戏·unity·c#
不吃斋的和尚8 小时前
Unity中一个节点实现植物动态(Shader)
unity·游戏引擎
虾球xz9 小时前
游戏引擎学习第117天
学习·游戏引擎
程序猿多布10 小时前
Unity 位图字体
unity
千年奇葩11 小时前
Unity shader glsl着色器特效之 模拟海面海浪效果
unity·游戏引擎·着色器
太妃糖耶13 小时前
Unity摄像机与灯光相关知识
unity·游戏引擎
007_rbq14 小时前
XUnity.AutoTranslator-Gemini——调用Google的Gemini API, 实现Unity游戏中日文文本的自动翻译
人工智能·python·游戏·机器学习·unity·github·机器翻译
Sui_Network15 小时前
Sui 如何支持各种类型的 Web3 游戏
大数据·数据库·人工智能·游戏·web3·区块链
万兴丶15 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#