【unity小技巧】常用的方法属性和技巧汇总

news/2024/11/7 19:15:14/

学习目标:

最近学习过程经常遇到一些好的方法属性和技巧,但是很容易忘记,单内容都比较少,又不至于开一篇文章单独讲解各个用法,特此单独写一篇做汇总,好记性不如烂笔头,后面收获一些新的知识我还会持续更新这篇文章的


移动:

# 让游戏对象在两个点之间按照固定速度进行平滑的移动
# 参数1表示当前位置,参数2表示目标位置,参数3表示单次调用时最大移动距离
transform.position = Vector2.MoveTowards(transform.position, targetPos, moveSpeed * Time.deltaTime);
# 使游戏对象平滑地移动到一个新的位置
# rb.position:获取刚体当前的位置
# movement:表示游戏对象的移动方向,是一个Vector3类型的变量
# 这个方法必须在FixedUpdate中调用,必须带有刚体,以保证物理引擎的正确协同工作
rb.MovePosition(rb.position + movement * moveSpeed * Time.deltaTime);
# 代码改变了刚体的速度(velocity)属性
# 这个方法必须在FixedUpdate中调用,必须带有刚体,以保证物理引擎的正确协同工作
rb.velocity = new Vector3(moveH, moveV, moveZ);

力:

# 给刚体施加一个向上的力
//rb.AddForce(new Vector2(0, jumpForce));
rb.AddForce(Vector2.up * jumpForce);rb.AddForce(Vector2.up * jumpForce, ForceMode.Force);

常见的ForceMode包括:

ForceMode.Force:添加一个可持续力到刚体,使用它的质量(默认)
ForceMode.Acceleration:添加一个可持续加速度到刚体,忽略它的质量
ForceMode.Impulse:添加一个瞬间的冲击力到刚体,使用它的质量
ForceMode.VelocityChange:添加一个瞬间的加速度给刚体,忽略它的质量

翻转:

# 缺点:如果角色带有子物体,比如武器,不会跟着一起翻转
sp = GetComponent<SpriteRenderer>();
sp.flipX = true;

在这里插入图片描述

transform.localScale = new Vector3(-1, 1, 1);

在这里插入图片描述

transform.eulerAngles = new Vector3(0, 180, 0);

在这里插入图片描述

单例模式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GameManager : MonoBehaviour
{public static GameManager instance;private void Awake();{if(instance =null){instance = this;}else{if(instance != this){Destroy(gameobject);}}DontDestroyOnLoad(gameobject);}
}

在Awake方法总,如果GameGameManager为空,那么我们就将这个脚本通过关键字【this】赋值给变量instance
在else语句中,如果instance不为空,那么instance并非当前的脚本,那么就需要销毁当前的游戏对象,来保证脚本的唯一性
最后别忘了在方法的最后,通过DontDestroyOnLoad方法,保证即使多个场景之间的互相切换也会保留这个脚本,保证在【不同场景】中的唯一性

取绝对值

Mathf.Abs(-10); 	//输出10

检测鼠标

UI事件系统的接口

public void OnPointerEnter(PointerEventData eventData){// 鼠标移入时执行的操作
}public void OnPointerExit(PointerEventData eventData){// 鼠标移出时执行的操作
}

如果是物体,并非UI就需要使用鼠标事件来实现了,注意物体必须要有Collider组件

public void OnMouseEnter(PointerEventData eventData){// 鼠标移入时执行的操作
}public void OnMouseExit(PointerEventData eventData){// 鼠标移出时执行的操作
}

旋转

# 每帧绕X轴旋转1度
transform.Rotate(Vector3.right, 1f);# 每帧绕z轴绕指定点旋转1度
transform.RotateAround(centerPosition, Vector3.forward, 1f);# 每帧绕全局坐标系下的Y轴旋转1度
transform.rotation *= Quaternion.Euler(0f, 1f, 0f);# 每帧绕本地坐标系下的Y轴旋转1度
transform.rotation *= Quaternion.AngleAxis(1f, Vector3.up);# 每帧将物体从“fromDirection”的方向旋转到“toDirection”的方向
transform.rotation = Quaternion.FromToRotation(fromDirection, toDirection);

取整

# 向上取整
Mathf.CeilToInt(1.1f); //输出2# 向下取整
Mathf.FloorToInt(1.1f); //输出1# 四舍五入
Mathf.Round(3.1415926f); //输出3# 保留两位小数
float num = 3.149f;
float result = Math.Floor(num * 100f) / 100f; //输出3.14# 四舍五入保留两位小数
float res = (float)Math.Round(num, 2); //输出3.15
string res = num.ToString("F2");   //输出3.15
string res = num.ToString("0.00"); //输出3.15# 不够补0
float num = 3.1f;
string numStr = num.ToString("0.00"); //输出3.10

窗口显示类

没有继承MonoBehaviour的脚本默认在窗口是不可编辑的,需要增加System.Serializable关键字
在这里插入图片描述


http://www.ppmy.cn/news/226100.html

相关文章

win10 华硕ASUS USB AC56 无线网卡 欧版 5G 信号不全 问题修复

最近去某宝淘了一张工包的AC56无线网卡&#xff0c;结果5g wifi信号不全&#xff0c;去wikidevi一查才知道是地区限制的问题&#xff0c;欧洲出售的版本收不到140以上的信道。折腾半天发现没办法&#xff0c;只能调路由器的信道&#xff0c;感觉亏大了&#xff0c;只好找JS换一…

华硕 B150M-ET SERIES主板加装内存条

如题&#xff0c;华硕 B150M-ET SERIES主板有两个8G的内存插槽&#xff0c;之前一直使用的靠近CPU的那个插槽&#xff0c;最近觉得内存不太够&#xff0c;决定再装一个8G内存条&#xff0c;买了同一电压&#xff0c;同一大小&#xff0c;同一频率的内存条&#xff0c;装在第二个…

技嘉BXBT1900 无线网卡的miniPCIE接口转装msata/ngff sata盘

技嘉BXBT1900 无线网卡的miniPCIE接口转装msata/ngff sata盘 上次的博文《minipcie/msata接口改装nvme ssd/ngff sata ssd方法及速率》&#xff0c;介绍的是将无线网卡的miniPCIE接口转装nvme固态盘&#xff0c;或者是将msata接口转装ngff sata盘。 然而不然人希望能在无线网卡…

计算机主板 安装系统,技嘉GA-B150M-D3V主板u盘重装系统win10步骤

技嘉 GA-B150M-D3V主板采用了英特尔制造的Intel B150北桥芯片以及LGA 1151的CPU插槽&#xff0c;能够搭配Core六代i7/i5/i3等处理器&#xff0c;支持DDR4内存&#xff0c;拥有2 DDR4 DIMM内存插槽。但是&#xff0c;关于这款主板笔记本的U盘重装win10系统&#xff0c;大家是否知…

一文学会MySQL四种安装方式

目录 &#x1f341;rpm方式安装 &#x1f340;下载软件包 &#x1f340;前置配置 &#x1f340;安装MySQL &#x1f341;yum方式安装 &#x1f340;下载软件包 &#x1f340;安装MySQL &#x1f341;二进制方式安装 &#x1f340;下载软件包 &#x1f340;安装MySQL &#x1f3…

力扣刷题笔记——动态规划

动态规划基础 简称DP&#xff0c;如果某⼀问题有很多重叠⼦问题&#xff0c;使⽤动态规划是最有效的。 动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的 1. 确定dp 数组&#xff08; dp table &#xff09;以及下标的含义 2. 确定递推公式 3. dp 数组如何初始化 4. 确定遍…

实训第一天

目录 主流的关系数据库 非关系型数据库 Mysql的启动和停止 Mysql登录方式本地登录 远程登录 查看mysql数据库 创建数据库 使用数据库 删除数据库 Mysql结构化查询语句 mysql 数据类型 数值类型 字符类型 日期类型 唯一约束与主键约束 主流的关系数据库 mysql,db2,oracle&a…

从 MySQL 到 OBOracle:如何处理自增列?

业务需要将数据库转换为 OceanBase 数据库&#xff0c;但源端涉及到 Oracle 及 MySQL 两种不同数据库&#xff0c;需要合并为 OceanBase 中单一的 Oracle 模式&#xff0c;其中源端 MySQL 数据库需要改造为 OB Oracle 并做异构数据迁移。在数据迁移中发现&#xff0c;MySQL 中的…