我有一个GameObject,我想沿着特定的路径/曲线设置动画,但动画应该由鼠标/触摸位置控制。因此,当我触摸/单击GameObject并在路径上/附近移动手指/鼠标(或者可能更容易向下移动)时,GameObject应遵循其定义的路径。
我喜欢iTween,但我认为在这里找不到使用它的解决方案,对吗?
编辑:添加图片:
答案 0 :(得分:4)
这比你想象的要简单得多。
基本上,这是将函数(将输入作为参数)重新映射到另一个函数(表示沿路径的位置)的问题。 有几种方法可以实现,具体取决于您想要实现的精确效果。
您必须采取的最重要的选择是:
示例强>
对于路径,一种简单灵活的方法是使用某种样条曲线,例如立方Bézier curve。它易于实现,Unity3D
提供了内置函数来绘制它们。看看Handles.DrawBezier。
Bézier函数基本上将域t
中的参数[0,1]
作为输入,并作为结果返回空间中的一个点(根据您的喜好选择2D或3D)。 B(0)
在曲线的开头给出了点,B(1)
结束点。 (旁注:函数不是线性的,因此在一般情况下以恒定速率递增t
不会沿曲线以恒定速度产生运动。这paper可能有用。)
对于输入的关注点,我想到的更简单的解决方案如下:
deltaPosition
)。类似的东西:
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
offsetFromStartPos += Input.GetTouch(0).deltaPosition;
}
假设您要向上/向下滑动手指以沿着路径向前/向后移动物体。选择手指的“行程”距离(输入功能的域)以完成沿着路径的移动使用此距离对曲线进行曲线和标准化,以便将输入重新映射到[0,1]
域。
float t = offsetFromStartPos.y / maxDistanceAlongYAxis;
Vector3 pos = CalculateBezier(t);
transform.position = pos;
这只是让你朝着正确方向前进的暗示。
答案 1 :(得分:0)
我尝试使用键盘,并且键盘工作正常, 但不能使用鼠标或触摸
require 'snmp'
HOST = '127.0.0.1'.freeze
registers = ['sysContact.0', 'sysUpTime.0',
'upsIdentManufacturer.0', 'upsIdentModel.0', 'upsIdentName.0']
params_array = {}
SNMP::Manager.open(host: HOST) do |manager|
manager.load_module('UPS-MIB')
response = manager.get(registers)
response.each_varbind do |vb|
##################################
# change from here...
value = nil
case vb.value.asn1_type
when 'OCTET STRING' # <==========
value = vb.value
when 'INTEGER' # <==========
value = vb.value.to_i
when 'TimeTicks' # <==========
value = vb.value.to_s
else
puts "Type '#{vb.value.asn1_type}' not recognized!"
exit(1)
end
params_array[vb.name.to_s] = value
# ... to here
##################################
# with something like
# params_array[vb.name.to_s] = vb.value._to_its_proper_type_
end
end
pp params_array