Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在编辑器中旋转平滑,但不是';插入装置_C#_Unity3d - Fatal编程技术网

C# 在编辑器中旋转平滑,但不是';插入装置

C# 在编辑器中旋转平滑,但不是';插入装置,c#,unity3d,C#,Unity3d,我有一个3D对象,我想用鼠标/手指滑动来旋转,所以我制作了下面的脚本 在编辑器上,对象的旋转看起来很平滑,但在真实设备(android)上玩游戏时,旋转并没有立即跟随手指的移动,跟随手指需要几毫秒的时间,它不平滑,控制变得困难和令人沮丧 float sensitivity = 0.8f; Vector2 firstPressPos; Vector2 secondPressPos; void Update() { if (Input.GetMouseButtonDown(0))

我有一个3D对象,我想用鼠标/手指滑动来旋转,所以我制作了下面的脚本

在编辑器上,对象的旋转看起来很平滑,但在真实设备(android)上玩游戏时,旋转并没有立即跟随手指的移动,跟随手指需要几毫秒的时间,它不平滑,控制变得困难和令人沮丧

float sensitivity = 0.8f;
Vector2 firstPressPos;
Vector2 secondPressPos;

void Update()
{

    if (Input.GetMouseButtonDown(0))
    {
        //save began touch 2d point
        firstPressPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y);
    }

    if (Input.GetMouseButton(0))
    {
        //save ended touch 2d point
        secondPressPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y);

        if (firstPressPos != secondPressPos)
        {
            float RotX = Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime;
            float RotY = Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime;
            transform.RotateAround(Vector3.up, RotX);
            transform.RotateAround(Vector3.right, -RotY);
        }
    }
}

这是几年前我发现的一个用鼠标或触摸操纵X轴旋转的脚本。它似乎对触摸很有效,但对鼠标则没有那么好。试试看,如果表现好一点,请告诉我。这一个应该动态调整旋转速度:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpinDrag : MonoBehaviour {

    float f_lastX = 0.0f;
    float f_difX = 0.5f;
    float f_steps = 0.0f;
    int i_direction = 1;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            f_difX = 0.0f;
        }
        else if (Input.GetMouseButton(0))
        {
            f_difX = Mathf.Abs(f_lastX - Input.GetAxis("Mouse X"));

            if (f_lastX < Input.GetAxis("Mouse X"))
            {
                i_direction = -1;
                transform.Rotate(Vector3.up, -f_difX);
            }

            if (f_lastX > Input.GetAxis("Mouse X"))
            {
                i_direction = 1;
                transform.Rotate(Vector3.up, f_difX);
            }

            f_lastX = -Input.GetAxis("Mouse X");
        }
        else
        {
            if (f_difX > 0.5f) f_difX -= 0.05f;
            if (f_difX < 0.5f) f_difX += 0.05f;

            transform.Rotate(Vector3.up, f_difX * i_direction);
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类:单一行为{
浮动f_lastX=0.0f;
浮动f_difX=0.5f;
浮动f_步数=0.0f;
int i_方向=1;
//用于初始化
void Start()
{
}
//每帧调用一次更新
无效更新()
{
if(Input.GetMouseButtonDown(0))
{
f_difX=0.0f;
}
else if(Input.GetMouseButton(0))
{
f_difX=Mathf.Abs(f_lastX-Input.GetAxis(“鼠标X”);
if(f_lastXInput.GetAxis(“鼠标X”))
{
i_方向=1;
变换。旋转(向量3.up,f_difX);
}
f_lastX=-Input.GetAxis(“鼠标X”);
}
其他的
{
如果(f_difX>0.5f)f_difX-=0.05f;
如果(f_difX<0.5f)f_difX+=0.05f;
变换。旋转(矢量3.up,f_difX*i_方向);
}
}
}

几年前我发现了一个脚本,它可以用鼠标或触摸操纵X轴旋转。它似乎对触摸很有效,但对鼠标则没有那么好。试试看,如果表现好一点,请告诉我。这一个应该动态调整旋转速度:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpinDrag : MonoBehaviour {

    float f_lastX = 0.0f;
    float f_difX = 0.5f;
    float f_steps = 0.0f;
    int i_direction = 1;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            f_difX = 0.0f;
        }
        else if (Input.GetMouseButton(0))
        {
            f_difX = Mathf.Abs(f_lastX - Input.GetAxis("Mouse X"));

            if (f_lastX < Input.GetAxis("Mouse X"))
            {
                i_direction = -1;
                transform.Rotate(Vector3.up, -f_difX);
            }

            if (f_lastX > Input.GetAxis("Mouse X"))
            {
                i_direction = 1;
                transform.Rotate(Vector3.up, f_difX);
            }

            f_lastX = -Input.GetAxis("Mouse X");
        }
        else
        {
            if (f_difX > 0.5f) f_difX -= 0.05f;
            if (f_difX < 0.5f) f_difX += 0.05f;

            transform.Rotate(Vector3.up, f_difX * i_direction);
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类:单一行为{
浮动f_lastX=0.0f;
浮动f_difX=0.5f;
浮动f_步数=0.0f;
int i_方向=1;
//用于初始化
void Start()
{
}
//每帧调用一次更新
无效更新()
{
if(Input.GetMouseButtonDown(0))
{
f_difX=0.0f;
}
else if(Input.GetMouseButton(0))
{
f_difX=Mathf.Abs(f_lastX-Input.GetAxis(“鼠标X”);
if(f_lastXInput.GetAxis(“鼠标X”))
{
i_方向=1;
变换。旋转(向量3.up,f_difX);
}
f_lastX=-Input.GetAxis(“鼠标X”);
}
其他的
{
如果(f_difX>0.5f)f_difX-=0.05f;
如果(f_difX<0.5f)f_difX+=0.05f;
变换。旋转(矢量3.up,f_difX*i_方向);
}
}
}
试试这个代码

// Screen Touches
    Vector2?[] oldTouchPositions = {
        null,
        null
    };
    // Rotation Speed
    public float rotSpeed = 0.5f;

    public void Update()
    {
        if (Input.touchCount == 0)
        {
            oldTouchPositions[0] = null;
            oldTouchPositions[1] = null;
        }
        else if (Input.touchCount == 1)
        {
            if (oldTouchPositions[0] == null || oldTouchPositions[1] != null)
            {
                oldTouchPositions[0] = Input.GetTouch(0).position;
                oldTouchPositions[1] = null;
            }
            else
            {
                Vector2 newTouchPosition = Input.GetTouch(0).position;
                float distanceX = (oldTouchPositions[0] - newTouchPosition).Value.x;
                float distanceY = (oldTouchPositions[0] - newTouchPosition).Value.y;

                float rotX = distanceX * rotSpeed * Mathf.Deg2Rad;
                float rotY = distanceY * rotSpeed * Mathf.Deg2Rad;


                transform.Rotate(Vector3.up, rotX * 5, Space.Self);
                transform.Rotate(Vector3.left, rotY * 5, Space.Self);


                oldTouchPositions[0] = newTouchPosition;

            }
        }
        else
        {
            if (oldTouchPositions[1] == null)
            {
                oldTouchPositions[0] = Input.GetTouch(0).position;
                oldTouchPositions[1] = Input.GetTouch(1).position;
            }
            else
            {

            }
        }
    }
请尝试此代码

// Screen Touches
    Vector2?[] oldTouchPositions = {
        null,
        null
    };
    // Rotation Speed
    public float rotSpeed = 0.5f;

    public void Update()
    {
        if (Input.touchCount == 0)
        {
            oldTouchPositions[0] = null;
            oldTouchPositions[1] = null;
        }
        else if (Input.touchCount == 1)
        {
            if (oldTouchPositions[0] == null || oldTouchPositions[1] != null)
            {
                oldTouchPositions[0] = Input.GetTouch(0).position;
                oldTouchPositions[1] = null;
            }
            else
            {
                Vector2 newTouchPosition = Input.GetTouch(0).position;
                float distanceX = (oldTouchPositions[0] - newTouchPosition).Value.x;
                float distanceY = (oldTouchPositions[0] - newTouchPosition).Value.y;

                float rotX = distanceX * rotSpeed * Mathf.Deg2Rad;
                float rotY = distanceY * rotSpeed * Mathf.Deg2Rad;


                transform.Rotate(Vector3.up, rotX * 5, Space.Self);
                transform.Rotate(Vector3.left, rotY * 5, Space.Self);


                oldTouchPositions[0] = newTouchPosition;

            }
        }
        else
        {
            if (oldTouchPositions[1] == null)
            {
                oldTouchPositions[0] = Input.GetTouch(0).position;
                oldTouchPositions[1] = Input.GetTouch(1).position;
            }
            else
            {

            }
        }
    }

您可以直接尝试Input.touch并从那里使用它。然后你们可以检测触摸的次数,然后也可以检测印刷机何时开始、何时停止等等。我在几年前写过类似的东西,我会看看是否能找到它。(这代替了Input.GetMouseButton*)@Apollo软件您能告诉我如何在我的脚本中应用它吗?或者给我举个例子->你用什么样的设备进行测试?这可能是android设备的处理/gpu能力与渲染场景的tris和Poly的对比。也许你的设备只是变得不知所措?Unity3D在几个地方发布了指南(每个机器人不同)。例如,在我的像素3上,我可以用很多多边形/三角形平滑运行。然而,在我的三星Galaxy S4 mini上,同样的场景也是波涛汹涌的您可以直接尝试Input.touch并从那里使用它。然后你们可以检测触摸的次数,然后也可以检测印刷机何时开始、何时停止等等。我在几年前写过类似的东西,我会看看是否能找到它。(这代替了Input.GetMouseButton*)@Apollo软件您能告诉我如何在我的脚本中应用它吗?或者给我举个例子->你用什么样的设备进行测试?这可能是android设备的处理/gpu能力与渲染场景的tris和Poly的对比。也许你的设备只是变得不知所措?Unity3D在几个地方发布了指南(每个机器人不同)。例如,在我的像素3上,我可以用很多多边形/三角形平滑运行。然而,在我的三星Galaxy S4 mini上,同样的场景也是波涛汹涌的它在编辑器中工作完美且流畅,但同样的事情也发生在移动设备上,不流畅且稍晚。您使用哪种设备进行测试?这可能是android设备的处理/gpu能力与渲染场景的tris和Poly的对比。也许你的设备只是变得不知所措?Unity3D在几个地方发布了指南(每个机器人不同)。例如,在我的像素3上,我可以用很多多边形/三角形平滑运行。然而,在我的三星Galaxy S4 mini上,同样的场景是波涛汹涌的。它在编辑器中工作得完美而流畅,但同样的事情发生在移动设备上,不流畅而且有点晚。您使用什么样的设备进行测试?这可能是android设备的处理/gpu能力与渲染场景的tris和Poly的对比。也许你的设备只是变得不知所措?Unity3D在几个地方发布了指南(每个机器人不同)。例如,在我的像素3上,我可以用很多多边形/三角形平滑运行。然而,在我的三星Galaxy S4 mini上,同样的场景也是波涛汹涌的。