How do I move an object on only two axis locally?
Hi, I am currently creating a VR fighting system, and I am currently trying to handle collision with swords. When a sword collides with an enemy, it should do a slashing motion like in real life, meaning it should only move in the direction of either side of the blade, where the blade is sharp, and in or out of the enemy. It should not be able to move along the flat side of the blade, since it realistically wouldn't be able to. How would I go about locking movement to only two axis? I have been able to lock the movement to to axis globally, but it's unlikely that a sword will slash the enemy at a perfect 90 degree angle, therefore I need to be able to move the sword on the axis locally. Here is the script I have written so far (in full):
private Vector3 entryVector;
private Vector3 slashVector;
private float lockXRotation;
private float lockYRotation;
private float lockZRotation;
private bool enteredEnemy = false;
private bool readyToAttack = false;
[SerializeField]
private Collider physicalBlade;
[SerializeField]
private Collider triggerBlade;
private Component[] weaponColliders;
private Rigidbody rb;
private void Start()
{
weaponColliders = GetComponentsInChildren<BoxCollider>();
rb = GetComponent<Rigidbody>();
}
private void Update()
{
if (enteredEnemy)
{
slashVector = new Vector3(transform.position.x, entryVector.y, transform.position.z);
readyToAttack = true;
}
else
{
readyToAttack = false;
slashVector = transform.localPosition;
}
if (enteredEnemy && readyToAttack)
{
transform.position = slashVector;
}
else
{
transform.localPosition = transform.localPosition;
}
if (GetComponentInChildren<RealisticMeleeBehaviourBladeTrigger>().bladeColliding)
{
transform.Find("PhysicalBlade").GetComponent<Collider>().enabled = false;
SetEntryVector();
}
else
{
transform.Find("PhysicalBlade").GetComponent<Collider>().enabled = true;
enteredEnemy = false;
}
}
private void SetEntryVector()
{
enteredEnemy = true;
entryVector = transform.position;
}
Your answer
Follow this Question
Related Questions
Enemy direction going crazy after collision 1 Answer
Need some help programming basic AI movement 0 Answers
Realistic Soccer VR 2 Answers
Unexisting blocks colliding and existing block not colliding 1 Answer
Colliders "offset" and going down too. 0 Answers