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