c# - 我如何在 Unity for android 中操纵立方体
问题描述
我有左键“a”和右键“d”的转向,但我怎样才能改变这个代码来转向win android?我的意思是,如果我单击屏幕左侧,我的立方体将向左移动,当我单击屏幕右侧时,我的立方体将向右侧移动?
void FixedUpdate () {
rb.AddForce (0, 0, forwardForce * Time.deltaTime);
if (Input.GetKey ("d")) {
rb.AddForce (sidewaysRight * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
} else if (Input.GetKey ("a")) {
rb.AddForce (sidewaysLeft * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
}
解决方案
实现这一点的一种简单方法是Overlay Canvas
在场景中添加一个并在每一侧放置两个透明图像,每个图像都覆盖应该激活相应转向方向的区域。
然后将EventTrigger
组件添加到每个并添加PointerEnter
和PointerExit
事件。
在您的主脚本中,您需要声明在触发事件时将执行的方法。例如:
bool steeringLeft, steeringRight;
public void OnLeftPointerEnter(BaseEventData data)
{
steeringLeft = true;
}
public void OnLeftPointerExit(BaseEventData data)
{
steeringLeft = false;
}
public void OnRightPointerEnter(BaseEventData data)
{
steeringRight = true;
}
public void OnRightPointerExit(BaseEventData data)
{
steeringRight = false;
}
最后,将这些方法链接到 EventTriggers 中的事件,您就可以开始了:
void FixedUpdate ()
{
rb.AddForce(0, 0, forwardForce * Time.deltaTime);
if (steeringRight)
rb.AddForce (sidewaysRight * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
else if (steeringLeft)
rb.AddForce (sidewaysLeft * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
注意:但是,我确实相信使用智能手机的陀螺仪实现转向会更酷:)
推荐阅读
- spring-boot - LocalDateTime 的自定义 spring-kafka 反序列化器
- windows - git ssh 身份验证因 ssh_askpass 失败:posix_spawn:未知错误
- asp.net - 如何以编程方式将“包含虚拟”分配给 asp.net 下拉列表项?
- php - 嵌套 Foreach 循环从 PHP 中的多维数组构造数据列表 - 嵌套 foreach 问题仅重复第一个数组的值
- javascript - 如何进行从数组调用的正则表达式替换
- node.js - CORS 将 HTTP 请求锁定到在 Firebase 上提供的 Angular 上的 Elasticsearch 服务器
- java - Java:如何使用 JNA 执行 ldap 搜索?
- c# - 防止 Page.ClientScript.RegisterOnSubmitStatement 在每次提交时运行
- php - 如何以编程方式检查 .mp4 文件是否未损坏且未丢失电影帧或音频片段
- mysql - Laravel 上不匹配的重复行