码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Unity学习笔记[一] RollBall小游戏


    目录

    一、适配vs

    二、初识Unity

    2.1 unity核心模块

    2.2 Unity基本操作和场景操作

    2.3 世界坐标系和局部坐标系

    2.4 工具栏 QWER

    三、基础知识

    3.1 基本组件

    3.2 刚体组件

    3.2.1 获取刚体组件

    3.2.2 给刚体施加力

    3.3 三维向量Vector3

    3.4 通过按键控制左右运动

    3.5 控制相机位置和跟随

    3.6 物体旋转

    3.7 碰撞检测

    3.8 触发检测

    四、RollBall游戏开发案例


    一、适配vs

    Edit -> Preference -> External Tools、

    二、初识Unity

    2.1 unity核心模块

    (1)Project:工程面板,存放工程的各种资源。声音、模型、场景、材质等。

    (2)Hierarchy: 层级面板,战士当前打开的场景里面有那些东西(游戏物体)。

    (3)Inspector:检视面板(属性面板),查看一个游戏物体由哪些组件组成。

    因此,场景 = 多个游戏物体   多个游戏物体包含多个组件

    (4)Scene:场景面板,显示当前场景的样子

    2.2 Unity基本操作和场景操作

    1、如何创建基本模型和如何导入复杂模型

    2、场景基本操作 聚焦:双击游戏物体 或者 F 放大缩小视野:鼠标滚轮 围绕物体旋转:Alt+鼠标左键 使用MoveTool下 移动物体

    3、视野分类 Persp 透视视野 ISO平行视野 在不同视野下:关于鼠标右键的不同

    4、保存(场景保存、代码保存) Ctrl + S

    2.3 世界坐标系和局部坐标系

    (1)坐标系:x 左右 y 上下 z 前后

    (2)局部坐标系  : 父物体与子物体

    (3)单位: Unity坐标以米为单位

    2.4 工具栏 QWER

    三、基础知识

    3.1 基本组件

    Transform:变换组件,位置、旋转、缩放。

    Mesh Filter:网格

    Meth Render:网格渲染(这个组件会使用材质进行渲染)

    Collider:碰撞检测

    3.2 刚体组件

    3.2.1 获取刚体组件

    1. private Rigidbody rd;
    2. rd = GetComponent();

    3.2.2 给刚体施加力

    rd.AddForce(Vector3.forward);
    

    3.3 三维向量Vector3

    三维向量 (x,y,z) Vector3.forward 等于 (0,0,1)

    一些常用的向量 Vector3.right Vector3.left Vector3.forward Vector3.back Vector3.up Vector3.down

    创建向量 new Vector3(x,y,z)

    3.4 通过按键控制左右运动

    1. 如何设置(Project Setting -》Input Manager)

    2.左右键/AD

    float h = Input.GetAxis("Horizontal");
    

     3.上下键/WS

    float v = Input.GetAxis("Vertical");
    
    1. float h = Input.GetAxis("Horizontal");
    2. float v = Input.GetAxis("Vertical");
    3. rd.AddForce(new Vector3(h,0, v));

    3.5 控制相机位置和跟随

    步骤:

    1、得到Player的Transform

    2、计算位置偏移

    3、根据位置偏移设置相机的位置

    1. public Transform playerTransform;
    2. private Vector3 offset;
    3. // Start is called before the first frame update
    4. void Start()
    5. {
    6. offset = transform.position - playerTransform.position;
    7. }
    8. // Update is called once per frame
    9. void Update()
    10. {
    11. transform.position = playerTransform.position + offset;
    12. }

    3.6 物体旋转

    transform.Rotate(Vector3.up,Space.World);

    3.7 碰撞检测

    碰撞事件  OnCollisionEnter OnCollisionExit  OnCollisionStay

    1. private void OnCollisionEnter(Collision collision)
    2. {
    3. if(collision.gameObject.tag == "Food")
    4. {
    5. Destroy(collision.gameObject);
    6. }
    7. }

    3.8 触发检测

    触发事件 OnTriggerEnter OnTriggerStay OnTriggerExit

    1. private void OnTriggerEnter(Collider other)
    2. {
    3. if (other.tag == "Food")
    4. {
    5. Destroy(other.gameObject);
    6. score++;
    7. scoreText.text = "分数: " + score;
    8. }
    9. if(score >= 11)
    10. {
    11. winText.SetActive(true); //物体可见
    12. }
    13. }

    四、RollBall游戏开发案例

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.UI;
    5. public class Player : MonoBehaviour
    6. {
    7. public Rigidbody rd;
    8. public int score = 0;
    9. public Text scoreText;
    10. public GameObject winText;
    11. // Start is called before the first frame update
    12. void Start()
    13. {
    14. // Debug.Log("游戏开始了");
    15. rd = GetComponent();
    16. }
    17. // Update is called once per frame
    18. void Update()
    19. {
    20. // Debug.Log("游戏正在执行");
    21. float fh = Input.GetAxis("Horizontal");
    22. float fw = Input.GetAxis("Vertical");
    23. // rd.AddForce(new Vector3(fh, 0, fw));
    24. rd.AddForce(new Vector3(fh,0,fw));
    25. //rd.AddForce(Vector3.up);
    26. }
    27. private void OnCollisionEnter(Collision collision)
    28. {
    29. if(collision.gameObject.tag == "Food")
    30. {
    31. Destroy(collision.gameObject);
    32. }
    33. }
    34. private void OnTriggerEnter(Collider other)
    35. {
    36. if (other.tag == "Food")
    37. {
    38. Destroy(other.gameObject);
    39. score++;
    40. scoreText.text = "分数: " + score;
    41. }
    42. if(score >= 11)
    43. {
    44. winText.SetActive(true);
    45. }
    46. }
    47. }

  • 相关阅读:
    【多服务场景化解决方案】智能家居(UrbanHome)
    Django爬虫:如何处理超过重试次数的请求以保障数据完整性
    linux 设备树学习总结
    「认识AI:人工智能如何赋能商业」【29】主流的机器学习工具
    数据可视化之快递行业发展,近几年我国快递行业业务量呈梯度级增长
    Qt应用开发(基础篇)——复选按钮 QCheckBox 单选按钮 QRadioButton
    【4.1 统计学基本概念】(描述性统计分析)——CDA
    基于C#利用S7.net库与西门子S7-1200PLC进行通信的具体方法(利用线程循环读取)
    3D 打印机 G 代码命令:完整列表和教程
    Spring 的 @Transactional 如何实现的?
  • 原文地址:https://blog.csdn.net/weixin_40582034/article/details/127944713
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号