You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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));
            }
        }  
    }
}

配置说明:

  1. 把需要克隆的对象做成预制体,拖拽到脚本的spawnPrefab字段上
  2. 在你的旋转按钮的OnClick事件中,选择挂载了该脚本的对象,绑定OnRotateButtonClicked方法
  3. 不需要保留原有代码中操作Rigidbody移动的逻辑,如果需要保留原对象跟随触摸移动的功能,可以单独保留对应代码块即可

内容的提问来源于stack exchange,提问作者broviv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:36:02