Unity 如何在屏幕触摸位置生成克隆物体并应用当前设置的旋转值
问题描述
我已实现通过代码在游戏的触摸位置克隆生成对象的功能,另有一个按钮可调整对象Y轴旋转角度(每次调整25度)。我希望实现:触摸屏幕生成克隆对象时,克隆对象自动应用当前对象的旋转值。
原实现代码
private Rigidbody myrigidbody; void Start() { myrigidbody = GetComponent<Rigidbody>(); } void Update() { if (Input.touchCount > 0) { var touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began) { var pos = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 10f)); myrigidbody.MovePosition(new Vector3(pos.x, pos.y, 0f)); } } }
解决方法
你需要新增变量存储当前的Y轴旋转值,同时调整触摸逻辑,生成克隆对象时直接传入对应的旋转参数即可,完整修改后代码如下:
using UnityEngine; public class TouchSpawnController : MonoBehaviour { // Inspector面板中拖拽需要克隆的对象预制体到该字段 public GameObject spawnPrefab; // 存储当前生效的Y轴旋转值 private float _currentYRot = 0f; // 该方法绑定到调整旋转按钮的OnClick事件,每次点击旋转值加25度 public void OnRotateButtonClicked() { _currentYRot += 25f; // 可选:超过360度后重置,避免数值无限增大 if (_currentYRot >= 360f) _currentYRot -= 360f; } void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began) { Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 10f)); Vector3 spawnPos = new Vector3(worldPos.x, worldPos.y, 0f); // 生成克隆对象时直接传入当前旋转值 Instantiate(spawnPrefab, spawnPos, Quaternion.Euler(0, _currentYRot, 0)); } } } }
配置说明:
- 把需要克隆的对象做成预制体,拖拽到脚本的
spawnPrefab字段上- 在你的旋转按钮的OnClick事件中,选择挂载了该脚本的对象,绑定
OnRotateButtonClicked方法- 不需要保留原有代码中操作Rigidbody移动的逻辑,如果需要保留原对象跟随触摸移动的功能,可以单独保留对应代码块即可
内容的提问来源于stack exchange,提问作者broviv
相关产品推荐
相关产品推荐

