Folks, I created a rudimentary cannon object with a simple hierarchy as follows:
Using the arrow keys, I can rotate the Gun Base
left and right around the Y-axis and rotate the Gun
up and down around the X-axis. All the rotation seem to work correctly, but I noticed that my projectiles shoot from inaccurate FiringPoint
when the Gun is tilted at a steep angle.
In its initial state, the FiringPoint
empty gameObject is at the correct position (This is in the X-axis perspective; the Gun
is at the top and the Gun Base
is at the bottom). As you can see, the FiringPoint
gradually starts lagging behind as the Gun starts tilting upward.
I fiddled with the axis for quite a bit, but can’t seem to figure out how to correct this behavior. I have been away from Unity for a long time, so please don’t be too harsh with your comments.
EDIT 1:
With further troubleshooting, I found out that the ‘Global’ and ‘Local’ toggle button found just below the Unity main menu results in different behaviors for the FiringPoint
.
When Global is selected, its Z-axis stays aligned with the initial direction (as shown in the screen captures), but when Local is selected, the Z-axis points to the same direction to which the Gun is pointing to. While the latter result seems to be more desirable, the center of the ‘FiringPoint’ is still off from the intended location, which is at the tip of the Gun.
EDIT 2:
To further elaborate the object setup, I have two separate scripts that are being used in this scene. First script for rotation around the Y-axis is attached to the Gun Base
, and the other script for rotation around the X-axis is attached to the Gun Mount Point
. There’s probably a better way to achieve the same result and if there is, I’d like to know!
One other caveat I noticed is that the Gun object itself gets heavily skewed when I test the up & down, left & right rotation. It doesn’t happen all the time, but it usually happens when I tilt up the Gun to almost 90 degrees, and then rotate it either to the right or left. And the object remains skewed until I reset the Play mode. Very odd…