【Unity游戏设计】跳一跳Day1

一、创建场景

  • Assets/Secnes:Game
  • Assets创建游戏资源Prefabs存放预制体,Scripts脚本,Sounds声音,Textures图片资源,Materiais材质
  • 资源分类存放意识

二、场景建模

注意:alt+鼠标左键切换视角

  1. 视角与摄像机视角保持一致:Main Camera+GameObject+Align View to Selected
  2. 创建球:0,1.85,0
  3. 创建圆柱:0,0,0,
  4. 合并为一个物体Player=圆柱+球:0,2,0;缩放比:0.2,0.2,0.2
  5. 创建立方体:0,0,0

三、角色掉落效果

  • Add Component+physics+rigid body
  • 设计视角=游戏视角 Main Camera+GameObject+Align With View
    注意:需要退出以后进行视角锁定
    请添加图片描述

四、颜色(材质)

  • Materiais中创建Materia+选择颜色+拖动到物体上色

五、创建脚本

  • Scripts中创建Player,拖拽到角色(左侧Inspector-Player)身上
  • 双击Player打开VS2022

请添加图片描述

1.角色跳跃起来

  • 固定角度-Constraints:X,Z打勾
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Player : MonoBehaviour
{private Rigidbody m_Rigidbody;// 最大力-public-易于调试public float fMaxForce = 500.0f;// 当前力量private float m_CurForce = 0.0f;// Start is called before the first frame updatevoid Start(){m_Rigidbody = GetComponent<Rigidbody>();}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {}else if (Input.GetMouseButton(0)) // 按下鼠标左键开始蓄力{// 一秒的时间内力量增加100*m_CurForce += Time.deltaTime * 100;// 最大力量限制if (m_CurForce > fMaxForce){m_CurForce = fMaxForce;}}else if (Input.GetMouseButtonUp(0)){// 调用Jump函数Jump();// 跳起后清零m_CurForce = 0.0f;}}// 跳跃private void Jump(){// 施加向上的力m_Rigidbody.AddForce(Vector3.up * m_CurForce);// 施加向前的力m_Rigidbody.AddForce(Vector3.forward * m_CurForce);}
}

2.蓄力表现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Player : MonoBehaviour
{private Rigidbody m_Rigidbody;// 最大力-public-易于调试public float fMaxForce = 500.0f;// 当前力量private float m_CurForce = 0.0f;// Start is called before the first frame updatevoid Start(){m_Rigidbody = GetComponent<Rigidbody>();}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) { }else if (Input.GetMouseButton(0)) // 按下鼠标左键开始蓄力{// 一秒的时间内力量增加100*m_CurForce += Time.deltaTime * 100;// 最大力量限制if (m_CurForce > fMaxForce){m_CurForce = fMaxForce;}}else if (Input.GetMouseButtonUp(0)){// 调用Jump函数Jump();// 跳起后清零m_CurForce = 0.0f;}ShowScale();}// 跳跃private void Jump(){// 施加向上的力m_Rigidbody.AddForce(Vector3.up * m_CurForce);// 施加向前的力m_Rigidbody.AddForce(Vector3.forward * m_CurForce);}// 蓄力表现private void ShowScale(){float sc = (fMaxForce - m_CurForce * 0.5f) / fMaxForce; // 比值实现蓄力表现:0-不变;1-缩小  m_CurForce * 0.5f:身高最多缩小到一般Vector3 scale = transform.localScale; // 获取角色当前缩放值scale.y = sc * 0.2f; // 因为角色原有的缩放比为0.2,保证角色的正常状态transform.localScale = scale;}
}

3.生成Box

(1)步骤一

  1. 将Cube,Player托至Prefabs
  2. Prefabs中的Cube,拖拽至左侧Player(Script)Box栏中

请添加图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Player : MonoBehaviour
{private Rigidbody m_Rigidbody;// 最大力-public-易于调试public float fMaxForce = 500.0f;// 当前力量private float m_CurForce = 0.0f;// 预制体-产生新的盒子public GameObject Box = null;// 新盒子的距离范围(距离必须超过盒子大小)public float fMaxDistance = 1.2f;public float fMinDistance = 3.0f;// 新盒子的高矮public float fMaxHeight = 0.3f;public float fMinHeight = 2.0f;// 新盒子的方向private Vector3 m_Direction = Vector3.forward; // 默认在前方// 实际的距离和高矮private float m_Distance = 0.0f;private float m_Height = 0.0f;// Start is called before the first frame updatevoid Start(){m_Rigidbody = GetComponent<Rigidbody>();// 游戏开始:产生新盒子GenerateBox();}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) { }else if (Input.GetMouseButton(0)) // 按下鼠标左键开始蓄力{// 一秒的时间内力量增加100*m_CurForce += Time.deltaTime * 100;// 最大力量限制if (m_CurForce > fMaxForce){m_CurForce = fMaxForce;}}else if (Input.GetMouseButtonUp(0)){// 调用Jump函数Jump();// 跳起后清零m_CurForce = 0.0f;}ShowScale();}// 跳跃private void Jump(){// 施加向上的力m_Rigidbody.AddForce(Vector3.up * m_CurForce);// 施加向前的力m_Rigidbody.AddForce(Vector3.forward * m_CurForce);}// 蓄力表现private void ShowScale(){float sc = (fMaxForce - m_CurForce * 0.5f) / fMaxForce; // 比值实现蓄力表现:0-不变;1-缩小  m_CurForce * 0.5f:身高最多缩小到一般Vector3 scale = transform.localScale; // 获取角色当前缩放值scale.y = sc * 0.2f; // 因为角色原有的缩放比为0.2,保证角色的正常状态transform.localScale = scale;}private GameObject GenerateBox(){// 创建新盒子GameObject obj = GameObject.Instantiate(Box);// 随机生成参数m_Distance = Random.Range(fMinDistance, fMaxDistance);m_Height = Random.Range(fMinHeight, fMaxHeight);m_Direction = Random.Range(0, 2) == 1 ? Vector3.forward : Vector3.left; // 1:前方 2:左// 方向*距离+目前角色位置Vector3 pos = m_Direction * m_Distance + transform.position; // 角色悬空导致盒子悬空pos.y = 0; // 盒子落地// 更新盒子的位置obj.transform.position = pos;// 更新盒子的高度:对x,z轴不进行改变,只对y轴进行改变obj.transform.localScale = new Vector3(1, m_Height, 1);// 更新盒子的颜色obj.GetComponent<MeshRenderer>().material.color = new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f));      return null;}
}

(二)步骤二

  • 添加地面:3D Object+Plane;调整地面大小:x=10,z=10
  • 禁用:Mesh Renderer
  • 提升Cube的高度:y=0.5
    请添加图片描述
  • 施加向前或向左的力-取决于生成盒子的方向:m_Rigidbody.AddForce(m_Direction * m_CurForce);
  • 统一盒子高度+掉落效果
    1. 添加刚体组件
      请添加图片描述

    2. Add Component+physics+rigid body

    3. 更改Cube高度:pos.y = 2.0f;

    4. 取消刚体震动:只保留y值
      请添加图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Player : MonoBehaviour
{private Rigidbody m_Rigidbody;// 最大力-public-易于调试public float fMaxForce = 500.0f;// 当前力量private float m_CurForce = 0.0f;// 预制体-产生新的盒子public GameObject Box = null;// 新盒子的距离范围(距离必须超过盒子大小)public float fMaxDistance = 1.2f;public float fMinDistance = 3.0f;// 新盒子的高矮public float fMaxHeight = 0.3f;public float fMinHeight = 2.0f;// 新盒子的方向private Vector3 m_Direction = Vector3.forward; // 默认在前方// 实际的距离和高矮private float m_Distance = 0.0f;private float m_Height = 0.0f;// Start is called before the first frame updatevoid Start(){m_Rigidbody = GetComponent<Rigidbody>();// 游戏开始:产生新盒子GenerateBox();}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) { }else if (Input.GetMouseButton(0)) // 按下鼠标左键开始蓄力{// 一秒的时间内力量增加100*m_CurForce += Time.deltaTime * 100;// 最大力量限制if (m_CurForce > fMaxForce){m_CurForce = fMaxForce;}}else if (Input.GetMouseButtonUp(0)){// 调用Jump函数Jump();// 跳起后清零m_CurForce = 0.0f;}ShowScale();}// 跳跃private void Jump(){// 施加向上的力m_Rigidbody.AddForce(Vector3.up * m_CurForce);// 施加向前的力m_Rigidbody.AddForce(m_Direction * m_CurForce);}// 蓄力表现private void ShowScale(){float sc = (fMaxForce - m_CurForce * 0.5f) / fMaxForce; // 比值实现蓄力表现:0-不变;1-缩小  m_CurForce * 0.5f:身高最多缩小到一般Vector3 scale = transform.localScale; // 获取角色当前缩放值scale.y = sc * 0.2f; // 因为角色原有的缩放比为0.2,保证角色的正常状态transform.localScale = scale;}private GameObject GenerateBox(){// 创建新盒子GameObject obj = GameObject.Instantiate(Box);// 随机生成参数m_Distance = Random.Range(fMinDistance, fMaxDistance);m_Height = Random.Range(fMinHeight, fMaxHeight);m_Direction = Random.Range(0, 2) == 1 ? Vector3.forward : Vector3.left; // 1:前方 2:左// 方向*距离+目前角色位置Vector3 pos = m_Direction * m_Distance + transform.position; // 角色悬空导致盒子悬空pos.y = 2.0f; // 盒子落地// 更新盒子的位置obj.transform.position = pos;// 更新盒子的高度:对x,z轴不进行改变,只对y轴进行改变obj.transform.localScale = new Vector3(1, m_Height, 1);// 更新盒子的颜色obj.GetComponent<MeshRenderer>().material.color = new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f)); return null;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华视 CVR-100UC 身份证读取 html二次开发模板

python读卡&#xff1a;python读卡 最近小唐应要求要开发一个前端的身份证读卡界面&#xff0c;结果华视CVR-100UC 的读取界面是在是有点&#xff0c;而且怎么调试连官方最基本的启动程序都执行不了。CertReader.ocx 已成功&#xff0c;后面在问询一系列前辈之后&#xff0c;大…

百卓Smart管理平台 uploadfile.php 文件上传漏洞复现(CVE-2024-0939)

0x01 产品简介 百卓Smart管理平台是北京百卓网络技术有限公司(以下简称百卓网络)的一款安全网关产品,是一家致力于构建下一代安全互联网的高科技企业。 0x02 漏洞概述 百卓Smart管理平台 uploadfile.php 接口存在任意文件上传漏洞。未经身份验证的攻击者可以利用此漏洞上传…

【Py/Java/C++三种语言详解】LeetCode每日一题240207【二叉树BFS】LeetCode2641、二叉树的堂兄弟节点II

有华为OD考试扣扣交流群可加948025485 可上全网独家的 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1336了解算法冲刺训练 文章目录 题目链接题目描述解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目链接 LeetCode2641、二叉树的堂…

泛型、Trait 和生命周期(上)

目录 1、提取函数来减少重复 2、在函数定义中使用泛型 3、结构体定义中的泛型 4、枚举定义中的泛型 5、方法定义中的泛型 6、泛型代码的性能 每一门编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是 泛型&#xff08;generics&#xff09;。泛型是具体类型…

Docker进阶篇-CIG重量级监控系统

一、简介 通过docker stats命令可以很方便的查看当前宿主机上所有容器的CPU、内存、网络流量等数 据&#xff0c;可以满足一些小型应用。 但是docker stats统计结果只能是当前宿主机的全部容器&#xff0c;数据资料是实时的&#xff0c;没有地方存储、 没有健康指标过线预警…

在angular12中proxy.conf.json中配置详解

一、proxy.conf.json文件的目录 二、proxy.conf.json文件中的配置 "/xxx/api": {"target": "地址/api","secure": false,"logLevel": "debug","changeOrigin": true,"pathRewrite": {"…

Unity C#进阶案例 “泛型编程”

文章目录 泛型基础示例1&#xff1a;泛型类与方法示例2&#xff1a;泛型方法示例3&#xff1a;泛型约束示例4&#xff1a;泛型委托与事件示例5&#xff1a;泛型单例模式&#xff08;Unity&#xff09; 在Unity中&#xff0c;C#的泛型编程是一种强大的工具&#xff0c;它允许你编…

【代码随想录24】93.复原 IP 地址 78.子集 90.子集II

目录 93.复原IP地址题目描述参考代码 78.子集题目描述参考代码 90.子集II题目描述参考代码 93.复原IP地址 题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如…

计算机视觉 | OpenCV 实现手势虚拟控制亮度和音量

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在当今科技飞速发展的时代&#xff0c;我们身边充斥着各种智能设备&#xff0c;然而&#xff0c;如何更便捷地与这些设备进行交互却是一个不断被探索的课题。本文将主要介绍一个基于 OpenCV 的手势识别项目&#xff0c;通过手势…

30s速通String——从JVM内存 到相关方法

0.深度理解String&#xff08;初学者可后面再看&#xff09; 1.JVM理解两种初始化String方式 1.1直接初始化 栈中保存变量s1,s2&#xff0c;而变量保存“abc”在方法区的地址 这里当“abc”具有唯一性&#xff0c;字符串常量区无此字符串&#xff0c;我们就产生一个新内存“…

AI数字人训练数据集汇总

唇读&#xff08;Lip Reading&#xff09;&#xff0c;也称视觉语音识别&#xff08;Visual Speech Recognition&#xff09;&#xff0c;通过说话者口 型变化信息推断其所说的内容&#xff0c;旨在利用视觉信道信息补充听觉信道信息&#xff0c;在现实生活中有重要应用。例如&…

QT Linux下无法使用CTRL+ALT+P快捷键,不生效

文章目录 一、背景二、排查&#xff08;1&#xff09;检查创建&#xff0c;发现没问题。&#xff08;2&#xff09;查看 shortcutMap 是否注册&#xff08;3&#xff09;排查xcb有没有获取到该事件&#xff08;4&#xff09;排查是否是系统的问题&#xff08;5&#xff09;www.…

TCP 粘包/拆包

文章目录 概述粘包拆包发生场景解决TCP粘包和拆包问题的常见方法Netty对粘包和拆包问题的处理小结 概述 TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中&#xff0c;比如RPC框架、Netty等 TCP 粘包/拆包 就是你基于 TCP 发送数据的时候&#xff0c;出现了多个字符串“粘”…

前端页面禁止debugger调试并跳转空白页面----文心一言官网实现方式

技术点&#xff1a;setInterval定时器Object.defineProperty 背景&#xff1a; 某天打开文心一言想看看接口返回结构是怎样的&#xff0c;熟练的打开浏览器开发者工具查看网络请求。 发现出现了以下debugger断点 这难不倒我&#xff0c;去掉断点调试&#xff0c;继续下一步不…

MyBatis多数据源以及动态切换实现(基于SpringBoot 2.7.x)

MyBatis多数据源以及动态切换实现可以实现不同功能模块可以对应到不同的数据库&#xff0c;现在就让我们来讲解一下。 目录 一、引入Maven二、配置文件三、实现多数据源四、动态切换数据源 一、引入Maven 注意&#xff1a;博主这边使用的springboot版本是2.7.14的 <!-- htt…

LeetCode:26.删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 目录 题目&#xff1a; 思路&#xff1a; 代码注释&#xff1a; 每日表情包&#xff1a; 题目&#xff1a; 思路&#xff1a; 没啥特殊的&#xff0c;老老实实双指针遍历数组&#xff0c;&#xff0…

获取旁站 / C 段:第三方网站(附链接)

一、介绍 1.1 旁段 在网络安全的上下文中&#xff0c;"旁段"&#xff08;Pivot&#xff09;是指攻击者通过入侵一个网络中的一台计算机&#xff0c;然后利用该计算机作为跳板&#xff08;或者称之为“旁道”&#xff09;来访问其他计算机或网络资源的行为。 攻击者…

如何启动若依框架

Mysql安装 一、下载 链接&#xff1a;https://pan.baidu.com/s/1s8-Y1ooaRtwP9KnmP3rxlQ?pwd1234 提取码&#xff1a;1234 二、安装(解压) 下载完成后我们得到的是一个压缩包&#xff0c;将其解压&#xff0c;我们就可以得到MySQL 5.7.24的软件本体了(就是一个文件夹)&…

虚幻5源码版打包服务端

适用情况&#xff0c;windows系统&#xff0c;已经安装vs2022之类的&#xff0c;和UE5适配的版本 源码版使用 1.下载源码版&#xff0c;推荐下载 压缩包 tar.gz那个&#xff0c;zip和git clone我老是下载不下载来&#xff0c;只是这个压缩包要解压1个多小时… 2.点击 源码的…

【RT-DETR有效改进】利用SENetV1重构化网络结构 (ILSVRC冠军得主)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是SENet(Squeeze-and-Excitation Networks)其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型,而是一个可以和现有的任何一个模型相结合…