【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.hqwc.cn/news/462270.html

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

相关文章

Linux探秘之旅:透彻理解路径、命令与系统概念

目录 如何远程连接 远程登录简明指南 linux区别 1.严格区分大小写 2.linux的命令返回结果判断 3.如何查看网络信息 4.关于后缀名&#xff08;Linux不关心文件后缀&#xff09; 4.1 需要记忆的后缀 5.echo命令 6.linux一切皆文件 6.1比如磁盘的文件 6.2可执行文件 …

【数据结构与算法】力扣刷题记之 稀疏数组

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

【51单片机】烧写教程:将代码下载到单片机中(图示&解析)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 这是LCD基本实验中的一部分&#xff0c;完整实验传送门如下&#xff1a;传送门 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是…

黄金交易策略(xauusd EA):手工同向单减保留仓

虽然保留仓的仓位不大&#xff0c;扛个一年半载不是问题&#xff0c;但闲着也可以手工处理掉&#xff08;10000点以内的不要处理&#xff09;。挑一个最大的单&#xff0c;同向相同的手数&#xff0c;并把两单的止盈设置平均值 &#xff08;也没有这么严格&#xff0c;差不多就…

vim常用命令以及配置文件

layout: article title: “vim文本编译器” vim文本编辑器 有三种模式: 命令模式 文本模式, 末行模式 vim命令大全 - 知乎 (zhihu.com) 命令模式 插入 i: 切换到输入模式&#xff0c;在光标当前位置开始输入文本。 a: 进入插入模式&#xff0c;在光标下一个位置开始输入文…

Stable Diffusion 模型下载:GhostMix(幽灵混合)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型&#xff0c;也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下&#xff0c;提高模型的成…

保育员答案在哪搜?这4款足够解决问题 #媒体#其他#其他

学会运用各类学习辅助工具和资料&#xff0c;是大学生培养自主学习能力和信息获取能力的重要途径之一。 1.石墨文档 石墨文档(Shimo Docs)是一款强大的在线文档协作工具。它提供了多人实时协作、版本控制、评论和批注等功能&#xff0c;方便学生在学习中进行文档编写、合作项…

Vue源码系列讲解——虚拟DOM篇【三】(更新子节点)

1. 前言 在上一篇文章中&#xff0c;我们了解了Vue中的patch过程&#xff0c;即DOM-Diff算法。并且知道了在patch过程中基本会干三件事&#xff0c;分别是&#xff1a;创建节点&#xff0c;删除节点和更新节点。创建节点和删除节点都比较简单&#xff0c;而更新节点因为要处理…

排序算法---冒泡排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 冒泡排序是一种简单的排序算法&#xff0c;其原理是重复地比较相邻的两个元素&#xff0c;并将顺序不正确的元素进行交换&#xff0c;使得每次遍历都能将一个最大&#xff08;或最小&#xff09;的元素放到末尾。通过多次遍…

32I2C通信协议

异步时序的&#xff1a;非常依赖硬件外设的支持&#xff0c;比如串口是很难用软件来模拟的&#xff1b;但节省了一根时钟线的资源 同步时序可以极大地降低单片机对硬件电路的依赖&#xff0c;时钟线停止了&#xff0c;发送方和接收方都会停止 一.I2C通信协议简介 二.硬件电路…

LabVIEW伺服阀性能参数测试

LabVIEW伺服阀性能参数测试 伺服阀作为电液伺服系统中的核心元件&#xff0c;其性能参数的准确测试对保证系统整体性能至关重要。开发了一种基于LabVIEW软件开发的伺服阀性能参数测试系统&#xff0c;提高测试的自动化程度和精确性&#xff0c;同时降低操作复杂度和成本。 传…

数据结构入门(1)数据结构介绍

目录 前言 1. 什么是数据结构&#xff1f; 2.什么是算法&#xff1f; 3.数据结构和算法的重要性 前言 本文将开始介绍计算机里的数据结构。 数据结构是指数据对象中元素之间的关系&#xff0c;以及对这些关系的操作。数据结构可以分为线性结构和非线性结构。 线性结构是…