Unity中基于坐标实现单个/多个对象的选择与平移功能开发求助
实现Unity对象相对平移功能的解决方案
嘿,你已经搞定了绝对坐标移动的核心功能,要实现相对平移其实只需要对现有代码做一点点调整就行,核心思路就是基于选中对象当前的坐标,加上用户输入的增量值,而不是直接覆盖成新坐标。
咱们来一步步修改:
关键修改点
你的moveObject方法现在是直接把对象位置设置为输入的绝对坐标,我们需要把它改成增量累加的逻辑:
1. 修改moveObject方法(基础版)
把原来直接赋值的代码改成累加增量,同时操作后重置输入框,方便下一次输入:
public void moveObject() { foreach(var target in targets) { // 用当前位置加上输入的增量,实现相对平移 target.transform.position += new Vector3(xPos, yPos, zPos); } // 平移完成后重置输入框为0,避免重复累加 inputx.text = "0.0f"; inputy.text = "0.0f"; inputz.text = "0.0f"; targets.Clear(); }
2. 优化输入值解析(健壮版)
你现在在Update里每帧都解析输入框的值,其实可以优化成只在点击移动按钮时再解析,同时用TryParse避免用户输入非数字内容时报错:
// 先移除Update方法里的这三行代码: // xPos = float.Parse(inputx.text); // yPos = float.Parse(inputy.text); // zPos = float.Parse(inputz.text); // 然后修改moveObject方法 public void moveObject() { // 点击按钮时再解析输入的增量值,解析失败则默认用0 float xDelta = float.TryParse(inputx.text, out float x) ? x : 0; float yDelta = float.TryParse(inputy.text, out float y) ? y : 0; float zDelta = float.TryParse(inputz.text, out float z) ? z : 0; foreach(var target in targets) { target.transform.position += new Vector3(xDelta, yDelta, zDelta); } // 重置输入框 inputx.text = "0.0f"; inputy.text = "0.0f"; inputz.text = "0.0f"; targets.Clear(); }
额外提示
- 如果之后需要同时支持绝对移动和相对平移,可以加一个Toggle组件,在代码里判断Toggle的状态,切换是直接赋值还是累加增量。
- 选中多个对象时,每个对象都会基于自己当前的位置独立平移,完全符合你的需求~
这样修改后,用户在面板输入的xyz值就会作为增量,加到选中对象的当前坐标上,完美实现相对平移功能啦!
内容的提问来源于stack exchange,提问作者xs0mE1
相关产品推荐
相关产品推荐

