LateUpdate调用的IK和粒子的Simulation Space导致的位置错误问题
游戏开发中遇到玩家的手枪瞄准右上方,开枪后枪口的火焰粒子会出现在正中间,刚好是没开启IK瞄准的位置,将粒子的SimulationSpace改为Local后问题解决,但是某些烟雾是需要World的.
原因是因为枪口的IK骨胳控制在LateUpdate里,所以粒子渲染后,所以用下面的脚本来强行让粒子位移.
using UnityEngine;
using System.Collections;
public class ParticleLateUpdate : MonoBehaviour {
public Transform target; // The Transform parented to one of the character's bones
private Vector3 targetPosition;
private Quaternion targetRotation;
void Start()
{
LateUpdate();
}
// Move this ParticleSystem to the target's last frame position before it emits
void Update()
{
transform.position = targetPosition;
//transform.rotation = targetRotation;
}
// Read the world space position and rotation of the target after procedural effects have been applied
// NB! Make sure this script is set to a higher value than FinalIK components in the Script Execution Order!
void LateUpdate()
{
targetPosition = target.position;
//targetRotation = target.rotation;
}
}
粒子不能放在枪口的挂点的相对位置,要挂在不受到IK影响的位置,仍到Root里也是可以的.