unity回顾之力的四种ForceMode

本文详细介绍了在Unity中如何使用刚体组件 Rigidbody 的 AddForce 方法来控制物体的运动,并解释了 ForceMode 的四种不同模式及其应用效果。通过实例代码展示了如何根据不同需求选择合适的力模式。

    给具有刚体的物体添加力,常使用的方法void Rigidbody.AddForce();有四个重载:void Rigidbody.AddForce(vector3 Force);、void Rigidbody.AddForce(Vector3 Force,ForceMode mode);其中第一个参数与第一个一样都是需要传入一个向量,第二个参数传入一个力的作用模式)、void Rigidbody.AddForce(float x,float y,float z);、void Rigidbody.AddForce(float x,float y,float z,ForceMode mode)(与前两个基本一样);其中ForceMode有四种形式:ForceMode.Acceleration、ForceMode.Force、ForceMode.Impulse、ForceMode.VelocityChange。

    刚体运动速度的计算公式是:f•t=m•v

    ForceMode.Force:给物体添加一个持续的力并使用其质量。本次测试采用质量为2

    ForceMode.Acceleration::给物体添加一个持续的加速度,但是忽略其质量。即无论设置的质量为多少,都采用默认质量1

    ForceMode.Impulse;:给物体添加一个瞬间的力并使用其质量

    ForceMode.VelocityChange;:给物体添加一个瞬间的加速度,但是忽略其质量

   测试时需要设置的参数,首先时质量设置为2(不为1即可),用来测试是否忽略质量。其次Drag设置为0.1,用来测试是否是持续的。测试代码:

    

using UnityEngine;
using System.Collections;

 class B : MonoBehaviour {
    public Rigidbody m_rigidbody;
    // Use this for initialization
    void Start () {
        m_rigidbody = GetComponent<Rigidbody>();
	}
	
	// Update is called once per frame
	void FixedUpdate () {
        if (Input.GetMouseButtonDown(0))
        {
            m_rigidbody.AddForce(new Vector3(0, 0, 10),ForceMode.Force);//, ForceMode.Acceleration);
        }
        Debug.Log(m_rigidbody.velocity);
	}
}

通过改变ForceMode即可在控制台上看到velocity的变化。

参考文章:

http://blog.youkuaiyun.com/quan2008happy/article/details/39299991

点击打开链接

http://blog.youkuaiyun.com/qq_16318981/article/details/50467819

点击打开链接

<think>好的,我现在需要帮助用户找到关于使用Unity3D开发跑酷游戏的毕业设计相关资料或教程。用户明确提到了需要教程、示例和代码。首先,我应该回顾之前的引用内容,看看有没有相关的信息。引用[1]提到Unity3D的专业开发需要学习引擎使用、3D数学、游戏专业知识,还特别列出了跑酷游戏的选题,这可能相关。引用[2]和[3]也提到了游戏设计类的毕设选题,但具体内容可能较少。 接下来,我需要根据用户的需求构建一个结构清晰的回答,分步骤介绍开发流程,并推荐相关资源。可能需要包括基础准备、核心模块实现、代码示例、优化建议以及参考资料。同时,用户要求生成相关问题,我需要思考哪些问题会帮助用户进一步深入该主题。 需要确保所有数学公式和代码块格式正确,比如行内公式用$...$,独立公式用$$...$$。另外,引用要自然添加在相关段落末尾。比如在提到碰撞检测时,可以引用关于3D数学的部分,或者在资源推荐时引用提供的链接。 还要检查是否有足够的示例代码,比如角色控制或生成跑道,确保代码正确且符合Python或C#语法(根据Unity通常使用C#)。同时,提供的教程链接需要有效,可能需要推荐Unity官方教程、Brackeys的频道以及GitHub上的开源项目。 最后,生成的相关问题要围绕跑酷游戏开发的不同方面,如性能优化、角色动画、多人模式、跨平台发布等,帮助用户扩展思路。</think>以下是为您整理的Unity3D跑酷游戏开发毕业设计实现指南,包含开发流程、核心模块说明及代码示例: ### 一、开发基础准备 1. **Unity环境配置** - 安装Unity Hub(推荐2021 LTS版本) - 新建3D项目时需注意选择URP渲染管线[^1] 2. **3D数学基础** 需要掌握向量运算(移动方向计算)和四元数(角色旋转),如角色移动公式: $$ \vec{v} = \vec{direction} \times speed \times \Delta t $$ ### 二、核心模块实现 #### 1. 角色控制系统 ```csharp public class PlayerController : MonoBehaviour { [SerializeField] float moveSpeed = 8f; [SerializeField] float jumpForce = 5f; private Rigidbody rb; private bool isGrounded; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { float horizontal = Input.GetAxis("Horizontal"); rb.velocity = new Vector3(horizontal * moveSpeed, rb.velocity.y, 0); if(Input.GetButtonDown("Jump") && isGrounded){ rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); isGrounded = false; } } void OnCollisionEnter(Collision col) { if(col.gameObject.CompareTag("Ground")){ isGrounded = true; } } } ``` #### 2. 动态跑道生成(对象池技术) ```csharp public class TrackGenerator : MonoBehaviour { [SerializeField] GameObject[] trackPrefabs; [SerializeField] int poolSize = 10; private Queue<GameObject> trackPool = new Queue<GameObject>(); void Start() { for(int i=0; i<poolSize; i++){ GameObject track = Instantiate(trackPrefabs[Random.Range(0, trackPrefabs.Length)]); track.SetActive(false); trackPool.Enqueue(track); } GenerateTrack(); } public void GenerateTrack() { GameObject newTrack = trackPool.Dequeue(); newTrack.transform.position = CalculateNextPosition(); newTrack.SetActive(true); trackPool.Enqueue(newTrack); } } ``` ### 三、毕业设计扩展建议 1. **数据持久化** 使用PlayerPrefs或SQLite记录游戏数据: ```csharp PlayerPrefs.SetInt("HighScore", currentScore); ``` 2. **性能优化方案** - 使用GPU Instancing优化相同材质物体渲染 - 通过Occlusion Culling减少绘制调用次数[^1] ### 四、推荐学习资源 1. [Unity官方跑酷教程](https://learn.unity.com/project/roll-a-ball)(基础3D物理交互) 2. [Brackeys跑酷系统教程](https://www.youtube.com/watch?v=9ZEu_I-ido4)(包含完整项目实现) 3. [GitHub开源项目参考](https://github.com/DapperDino/Unity-3D-Endless-Runner)(含对象池实现)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值