- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在对池化对象应用相对力时遇到问题。
我有一个对象池,里面有我所有的项目符号都可以重复使用。子弹在不使用时被禁用。
当玩家射击他的武器时,从对象池中拉出一颗子弹,并按以下顺序对子弹执行以下操作:
这只适用于一名玩家。当我有另一个玩家也从对象池中拉子弹时,子弹似乎保持了前一个玩家的旋转,所以力的方向是错误的。
我可以/可以做的一件事是等待下一帧,在设置旋转和应用相对力之间,但感觉不对。我错过了什么吗?下面的代码略有修改,但缩小了范围。
function Shoot() {
GameObject poolObject = GetObjectFromPool();
poolObject.SetActive(true);
poolObject.transform.position = transform.position;
poolObject .transform.rotation = transform.rotation;
if (poolObject != null)
{
//add force
Rigidbody rBody = poolObject.GetComponent<Rigidbody>();
rBody.AddRelativeForce(Vector3.forward * ProjectileSpeed.Value, ForceMode.Impulse);
}
}
最佳答案
在再次使用之前总是从池中重置项目。为池中的每种类型的对象设置一个函数,您可以轻松调用该函数来重置它们。由于子弹附有一个 Rigidbody
并且当您从池中取出它时它仍在移动,只需重置 velocity
和 angularVelocity
以防万一它还在旋转。为此,您可以将它们设置为 Vector3(0, 0, 0);
。 Vector3.zero
属性是 new Vector3(0, 0, 0);
的快捷方式,应在此处使用。
应该这样做:
public void resetPool(Rigidbody rg)
{
rg.velocity = Vector3.zero;
rg.angularVelocity = Vector3.zero;
}
关于c# - 在添加新力之前从 Rigidbody 移除先前的力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47414286/
我正在制作一款需要像物理一样需要引力的游戏。我试图找到特定层中每个刚体(运行脚本的刚体除外)的质心。我有这个: float AvrgMass; float count = 0f; Vector3 Av
我正在使用 c# mono 和 unity3d 4.1.2。 我有以下脚本: using UnityEngine; using System.Collections; public class Pla
我是 JME3 新手,在理解 BetterCharacterControl 时遇到一些问题。 当我尝试将 BetterCharacterControl 应用于框时,它总是从框的上部而不是中心“扩展”。
我无法在 OgreBulletDynamics 包装器中查找函数。我正在尝试使用 bullet wiki 中的示例检测 2 个刚体之间的碰撞 http://bulletphysics.org/medi
所以,我正在尝试进行无限跳线,但出于某种原因,OnTriggerEnter2D 函数 rb2D 给了我一个错误,即使我已尽一切努力使其正常工作(至少我是这么认为的,因为每次我这样做时它都会起作用。)错
我在对池化对象应用相对力时遇到问题。 我有一个对象池,里面有我所有的项目符号都可以重复使用。子弹在不使用时被禁用。 当玩家射击他的武器时,从对象池中拉出一颗子弹,并按以下顺序对子弹执行以下操作: 设置
我正在尝试使用Rigidbody 对主要 FPS 角色的 Action 进行编程。 相机和 ZQSD 位移效果很好,但移动时跳跃非常受限: 固定跳跃:Y(分钟)= 1; Y(最大)= 2.7; 移动跳
我目前正在开发一款在 Unity 中使用点击移动的游戏。当我点击 map 上的一个点时,我将鼠标的点击设置为目的地,然后使用游戏对象上的刚体通过 RigidBody.MovePosition() 移动
我有一个 THREE.js 场景,其中对象使用 CANNON.js 应用了物理学。 RigidBody 像这样初始化: let shape = new CANNON.Box(new CANNON.Ve
我有一个具有正确物理和碰撞功能的刚体。但是,我想让这个对象“不可见”,这样它就不会在物理(步进模拟)中被考虑,但仍然会产生正确的碰撞。当然,我不能在我的 3D 场景中渲染它,但我还需要以某种方式使其在
当它尝试向我的播放器添加一个力时,它会移动,然后被传送回去。我需要使用 RPC 吗? 新代码: void OnTriggerEnter(Collider other) { if (other.
我正在学习 Unity,我正在尝试从 XNA 在 Unity 中重新创建我的游戏。 我正在关注这个 Tutorial Playlist来自 unity on youtube,我使用 GameManag
我有一个附有Rigidbody的立方体,每当我按下播放按钮时,它就会轻微滑动。如果我将其放置一段时间,它就会滑到屏幕的另一侧。 有人知道如何在不使用“卡住位置”的情况下解决这个问题吗?我不知道我的项目
我真的需要一些关于我的游戏对象的帮助。 我正在开发一款游戏,我想要一个拾取元素来产生物理力爆炸来炸毁敌人。我做了一个简单的炸弹对象来测试这个想法。我添加了一个简单的代码,使用一个循环来收集其半径内的所
我想让我的 Angular 色跳起来,但我不明白他为什么不跳。我的代码使用力和 Rigidbody2D。我是 Unity 的新手,找不到任何答案。请帮忙? 我的物理代码: var trump; fun
我正在使用这个: void Update(){ if(leftJoystick){ rb.AddRelativeForce(0, 0, 400f, ForceMode.Impu
我是 Unity 新手。 我有 Rigidbody2D,我想为我的播放器添加常量 velocity。我想知道在 Start 或 Update (或 FixedUpate ) 当我在开始时应用速度时一切
目标:我正在开发一款非常依赖 Unity 的 2D 物理的回合制游戏。对我来说重要的是所有 body 一停止移动就进入休眠状态,因为我在等待它在下一轮开始。 问题:不幸的是, body 从不 slee
我正在创建一个 THREE.Mesh使用 THREE.JSONLoader 的对象像这样的对象: // Create castle. loader.load('/Meshes/CastleTower.
我是一名优秀的程序员,十分优秀!