As I understand, if you have a tech that changes unitAttachment / unitProperty, then ALL players with access to this unit (like a unit called “infantry”) will suffer/make use of the unit changes. If you do a tech that does this, like changes the attack value or gives a new property to a unit, then the unit type is changed on the map for everyone.
If you want only a single player’s units to be affected, then the unit must be unique to this player. For example, all players must have their own kind of infantry unit. Like “Ger_infantry”, “US_Infantry” and so on, so that the individual players can get their units changed. I think Total World War makes use of this system. This XML´s units are named like this: germanTank, russianTank and so on.
One of the triggers, when germany optains the “ImprovedTanks” tech, is like this. It changes the German Tank´s stats/unitProperty:
<attatchment name="triggerAttachmentgermanImpTanks2" attatchTo="Germany" javaClass="games.strategy.triplea.attatchments.TriggerAttachment" type="player">
<option name="trigger" value="conditionAttachmentgermanImprovedTanks"/>
<option name="unitType" value="germanTank"/>
<option name="unitProperty" value="defense" count="5"/>
<option name="uses" value="1"/>
Another way of making tech triggers, that allows for units to be named the same / be the same for all players but still change the stats of only one player's units, is to give that player bonuses as part of the new tech. I have done this in the Star Trek map. One of the tech in this map is called ”Heavy-Cruiser-Warp-Upgrade” and does the following ... gives 1 bonus movement / changes move stat from 1 to 2:
<attachment name="techAbilityAttachment" attachTo="Heavy-Cruiser-Warp-Upgrade" javaClass="games.strategy.triplea.attachments.TechAbilityAttachment" type="technology">
<option name="movementBonus" value="1:Heavy-Cruiser"/>
These two types of upgrading / giving tech both have limits. I think some of the limits are described in the Pos2.xml, or at least you can see what possibilities there are.