Unity3D基础13:给物品添加力
前文:https://blog.csdn.net/Jaihk662/article/details/86757037(Rigidbody物理类组件)
https://blog.csdn.net/Jaihk662/article/details/86759460(碰撞体)
PS:注释和讲解部分在代码中
一、给物体添加力
两个方法:
Rigidbody.AddForce(Vector3,ForceMode):给刚体添加一个力,让刚体按世界坐标系进行运动
Rigidbody.AddRelativeForce(Vector3,ForceMode):给刚体添加一个力,让刚体按自身坐标系进行运动
注意:物体运动过程中自身坐标系可能随时发生改变(例如球滚动),这就意味着按自身坐标系运动方向可能会随时发生变化
Vector3:力的向量,ForceMode:力的模式(枚举类)
四种力的模式(Ft=mv):
- ForceMode.Force:给物体一个持续的力
- ForceMode.Acceleration:给物体一个持续的加速度,但是忽略其质量,质量被默认为1
- ForceMode.Impulse:给物体添加一个瞬间的力
- ForceMode.VelocityChange:给物体添加一个瞬间的加速度,忽略其质量
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Text1: MonoBehaviour
{//因为Start()只会在开始游戏时被执行一次,所以一般都用来初始化private Transform myTransform; //实例化Transform对象private Rigidbody myRigidbody;void Start(){Debug.Log("Start"); //输出调试myTransform = gameObject.GetComponent<Transform>(); //获取相应对象的引用myRigidbody = gameObject.GetComponent<Rigidbody>();}// Update is called once per framevoid Update(){if(Input.GetMouseButtonDown(1))myRigidbody.AddForce(new Vector3(0, 0, -3), ForceMode.Impulse);if(Input.GetMouseButton(0))myRigidbody.AddForce(new Vector3(0, 0, -10), ForceMode.Force); //如果动不了,可能是力量太小,需要调整向量参数}
}
二、FixedUpdate()固定更新方法
要知道正常游戏1帧=1次动画渲染,当你显卡不行,那么1秒可能只有20帧,如果追求极致,1秒可以144帧,也就是每帧不固定,这个时候就需要固定刷新时间/方法调用时间。特别是:在Update()方法中执行物理操作,会出现卡顿的情况
这样,所有和物理相关的操作,代码都要写在 FixedUpdate() 方法体内
FixedUpdate() 的固定更新的时间间隔是0.02秒,也就是1秒执行50次。
手动设置方法:Edit→Project Settings→Time面板,里面的Fixed Timestep参数即是时间间隔
正确代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Text1: MonoBehaviour
{//因为Start()只会在开始游戏时被执行一次,所以一般都用来初始化private Transform myTransform; //实例化Transform对象private Rigidbody myRigidbody;void Start(){Debug.Log("Start"); //输出调试myTransform = gameObject.GetComponent<Transform>(); //获取相应对象的引用myRigidbody = gameObject.GetComponent<Rigidbody>();}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.W)){Debug.Log("刚体向前移动");myRigidbody.MovePosition(myTransform.position + (new Vector3(0, 0, 1)));}if (Input.GetKeyDown(KeyCode.A)){Debug.Log("刚体向左移动");myRigidbody.MovePosition(myTransform.position + (new Vector3(-1, 0, 0)));}if (Input.GetKeyDown(KeyCode.S)){Debug.Log("刚体向后移动");myRigidbody.MovePosition(myTransform.position + (new Vector3(0, 0, -1)));}if (Input.GetKeyDown(KeyCode.D)){Debug.Log("刚体向右移动");myRigidbody.MovePosition(myTransform.position + (new Vector3(1, 0, 0)));}}void FixedUpdate(){if (Input.GetMouseButtonDown(1)) //按下鼠标右键myRigidbody.AddForce(new Vector3(0, 0, -3), ForceMode.Impulse);if (Input.GetMouseButton(0)) //压住鼠标左键myRigidbody.AddForce(new Vector3(0, 0, -10), ForceMode.Force);}
}
效果如下:
Unity3D基础13:给物品添加力相关推荐
- Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作) 一.属性介绍 1.主面板Particle System (1)Duration:粒子发射周期 图中,5.00即在发射5秒后进入下一个 ...
- [.net 面向对象编程基础] (13) 面向对象三大特性——多态
[.net 面向对象编程基础] (13) 面向对象三大特性--多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D...
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- 命名空间_python基础 13 类命名空间于对象、实例的命名空间,组合方法
python基础 13 类命名空间于对象.实例的命名空间,组合方法 1.类命名空间于对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- Unity3D基础14:碰撞检测
前文:https://blog.csdn.net/Jaihk662/article/details/86759460(碰撞体) https://blog.csdn.net/Jaihk662/artic ...
- Unity3D基础2:新建模型
前文:https://blog.csdn.net/Jaihk662/article/details/86743037(Unity3D基础操作) 一.尺寸与方向 尺寸:默认的方块(Cube)长宽高都是1 ...
- 作业1 OO基础1-3、 设计一个教师类Teacher(属于cn.net.sdkd包)
作业1 OO基础1-3. 设计一个教师类Teacher(属于cn.net.sdkd包) 要求: 1)属性有编号(int no).姓名(String name).年龄(int age).所属学院(Str ...
- 【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D
转自:https://www.cnblogs.com/neverdie/p/How_To_Learn_Unity3D.html(http://www.cnblogs.com/neverdie/) Un ...
最新文章
- 渣科如何逆袭进阿里 No.137
- 缓存 Memached
- cad vba 打开文件对话框_CAD文件损坏?无法打开?别急,这八种方法或许能帮到你...
- android新拟态实现方法,Android 新拟态UI (Neumorphism)
- Java设计模式学习总结(4)——创建型模式之单例模式
- cad填充图案乱理石_cad填充图案(cad中如何进行图案填充?)
- 计算机论文的字体要求,论文格式及字体大小要求(标准)
- java jdom 创建xml_java中使用jdom生成xml
- Scrapy豆瓣电影top250(excel保存和图片下载)
- H5 打开微信小程序 公众号
- 获取基因的所有转录本(不同亚型)的外显子区域
- [proxy:0:0@WORKSTATION-DEV] HYDU_sock_write (utils/sock/sock.c:256): write error (Broken pipe)
- 悬浮窗——判断及跳转(包含OPPO 5.1 系统等)
- 谷歌浏览器访问抖音网页版白屏
- matlab矩阵逆时针旋转90度
- Cesium 之加载倾斜摄影3d模型(解决倾斜漂移问题)
- 【学习OpenCV4】OpenCV4与opencv-contrib模块介绍
- Google Map 离线地图 - Ok Maps
- 如何用数学课件制作工具画出固定长度的线段
- iso20000认证叫什么,iso20000标准?
热门文章
- 学python能干什么工作-什么是Python?学完之后能做哪些工作?
- python编程语言-为什么Java、Python会成为程序员最害怕的编程语言?
- 语音识别相关工具和资料分享
- 华哥讲堂:解析智能电视语音控制功能
- 你了解语音识别技术吗?
- 孩子忽悠家长充值?腾讯游戏在人脸识别中加入语音提醒
- python+opencv打开摄像头、拍摄指定次数的照片_python+openCV调用摄像头拍摄和处理图片的实现...
- Vue双向数据绑定 ~ 非常详细哦
- ActionScript 3.0 API 中的 Video 类
- H.264 无参考视频质量评价方法 (使用了基于遗传编程方法的符号回归)