首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有办法让一个游戏对象在触摸另一个游戏对象时暂停?在unity的c#上?

有没有办法让一个游戏对象在触摸另一个游戏对象时暂停?在unity的c#上?
EN

Stack Overflow用户
提问于 2021-10-07 13:25:48
回答 1查看 85关注 0票数 1

所以我试图找到一种方法,让玩家只需点击右箭头键就可以无限移动,如果它接触到另一个游戏对象,它就会停在游戏对象的位置,如果再次点击按钮,它就会再次移动。

注意:我刚开始使用unity,也刚开始用c#编程,所以请尽量用一种简单易懂的方式来解释。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Rigidbody2D rb2d;
public float speed = 10;

public const string RIGHT = "right";
public const string LEFT = "left";
string buttonPressed;

public GameObject Rainbow_1;
public GameObject Rainbow_0;

bool isCol = false;

void Start() 
{ 
    rb2d = GetComponent<Rigidbody2D>(); 
}
void Update() 
{
    if (Input.GetKey(KeyCode.RightArrow)) { buttonPressed = RIGHT; }
    else if (Input.GetKey(KeyCode.LeftArrow)) { buttonPressed = LEFT; }
    else { buttonPressed = null; } 
}

private void FixedUpdate()
{
    if(buttonPressed == RIGHT)
    {
        if(isCol) 
        {
            StartCoroutine(sfos());
        }
        else if(!isCol)
        {
            rb2d.velocity = new Vector2(speed, 0);
        }                      
    }
}

IEnumerator sfos()
{
    Rainbow_0.transform.position = Rainbow_1.transform.position;
    yield return new WaitForSeconds(3);
}

private void OnTriggerEnter2D(Collider2D other)
{
    Debug.Log("Collision detected");
    isCol = isCol;
}

private void OnCollisionExit2D(Collision2D other) { isCol = !isCol; }
EN

回答 1

Stack Overflow用户

发布于 2021-10-07 13:54:29

你想要做的是停止你的播放器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rb2d.velocity = new Vector2(0, 0);

您还需要发出冲突信号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
isCol = true;

碰撞

在初始化之外的任何时刻,都不要将isCol变量设置为true。这意味着您的第一次冲突将会注册,但所有后续冲突将不会注册;要修复此问题,请更改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void OnTriggerEnter2D(Collider2D other) {
    Debug.Log("Collision detected");
    isCol = isCol;
}
private void OnCollisionExit2D(Collision2D other) { isCol = !isCol; }

至:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void OnTriggerEnter2D(Collider2D other) {
    Debug.Log("Collision detected");
    isCol = true;
}
private void OnCollisionExit2D(Collision2D other) { isCol = false; }

当它像这样明确的时候更容易看出来。

速度

对于速度,您的FixedUpdate方法有条件地将速度设置为speed, 0,但您从未将其设置为其他任何值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void FixedUpdate() {
    if(buttonPressed == RIGHT) {
        if(isCol)  {
            StartCoroutine(sfos());
        }
        else if(!isCol) {
            rb2d.velocity = new Vector2(speed, 0);
        }                      
    }
}

如果不想移动,则需要将速度设置为零;因此,如果isCol为真:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void FixedUpdate() {
    if(buttonPressed == RIGHT) {
        if(isCol)  {
            rb2d.velocity = new Vector2(0, 0);
            StartCoroutine(sfos());
        }
        else if(!isCol) {
            rb2d.velocity = new Vector2(speed, 0);
        }                      
    }
}

此外,为了简单起见,我相信Unity的2D向量包含一个名为zero的属性/字段,因此以下内容也可以工作,但目前无法直接访问Unity,我不能承诺任何事情。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rb2d.velocity = Vector2.zero
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69488034

复制
相关文章
【100个 Unity实用技能】| Unity 查询游戏对象位置是否在NavMeshAhent烘焙上的网格上
问题:在使用Navigation导航系统的时候,有时候需要判断某个点是否在我们的导航网格中,以免在进行某些敌人或者游戏对象实例化生成的时候将对象的位置放在了导航网格之外。
呆呆敲代码的小Y
2022/10/05
1.8K0
【100个 Unity实用技能】| Unity 查询游戏对象位置是否在NavMeshAhent烘焙上的网格上
游戏设计模式——Unity对象池
对象池这个名字听起来好像不明觉厉,其实就是将一系列需要反复创建和销毁的对象存储在一个看不到的地方,下次用同样的东西时往这里取,类似于一个存放备用物质的仓库。
汐夜koshio
2020/03/19
4.1K0
Unity2D游戏对象的渲染顺序
所以在Unity2D中,Sorting Layer和Order in Layer的组合优先级最高,其次是Z Position和Camera Settings,然后是Renderer Components和Sorting Groups,最后是Transform Position的细微影响。开发者可以根据这个优先级顺序合理安排渲染顺序。
码客说
2023/08/14
1.2K0
Unity2D游戏对象的渲染顺序
Unity2D游戏开发-游戏对象和组件的查找方式
通过标签查找(FindObjectsOfType)使用GameObject的FindObjectsOfType方法可以根据类型查找场景中所有匹配的对象。
码客说
2023/08/08
5820
【Unity3D入门教程】使用C#脚本控制游戏对象
使用C#脚本控制游戏对象,是一项必备的基本技能。Unity3D可以使用的脚本有C#和javascript等。我们主要讲注意力集中在C#上。本文将会介绍怎样使用脚本控制场景中的游戏对象。
全栈程序员站长
2022/09/23
1.4K0
【Unity3D入门教程】使用C#脚本控制游戏对象
游戏开发初级之游戏对象和组件关系(Unity3D)
在Unity中, GameObject几乎就是一个空对象。这是其他一切的基础。它只是一个有组件空间的原始对象。除非我们向GameObject添加组件,否则GameObject本身什么也不做。
恬静的小魔龙
2022/08/07
1.1K0
游戏开发初级之游戏对象和组件关系(Unity3D)
Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题
主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题。
meteoric
2018/11/19
3.2K0
Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题
当你在苛责VR游戏平台时,你在苛责什么?
6月8日,国内某知名VR媒体平台在其微信公众号中发布了一篇文章《中国VR游戏侵权样板戏调查》。该文直指国内某VR游戏平台上线了某盗版VR游戏,一时引发圈内热议。一天后,该媒体平台再次发文转载了另一公众
VRPinea
2018/05/16
6680
Unity - 在鼠标点击的位置放置对象
你可以使用函数实例化多个给定的游戏对象或预制对象。 Instantiate (Object Target, object’s position, object’s rotation)或者Instantiate (Object Target)。
hrscy
2018/08/30
5.3K0
Unity - 在鼠标点击的位置放置对象
【Unity3d游戏开发】游戏中的贝塞尔曲线以及其在Unity中的实现
  RT,马三最近在参与一款足球游戏的开发,其中涉及到足球的各种运动轨迹和路径,比如射门的轨迹,高吊球,香蕉球的轨迹。最早的版本中马三是使用物理引擎加力的方式实现的足球各种运动,后来的版本中使用了根据物理学公式手动计算位置和物体速度的方式实现,现在这个版本中使用的是DoTween+贝塞尔曲线调节来实现。(关于它们之间的各种优缺点我们会在以后单独开一篇博客来探讨,届时也会放出源代码互相学习下)好了,言归正传,今天马三就来和大家一起学习一下游戏中的贝塞尔曲线以及其在Unity中如何实现。
马三小伙儿
2018/09/12
4.4K0
【Unity3d游戏开发】游戏中的贝塞尔曲线以及其在Unity中的实现
【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
  Lua是一门非常强大、非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言。但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是一项庞大复杂的工程,如果没有面向对象功能势必会为开发带来一定的不便。不过幸好Lua中有table这样强大的数据结构,利用它再结合元表(metatable),我们便可以很方便地在Lua中模拟出类、继承和多态等面向对象编程具有的特性。
马三小伙儿
2018/09/12
3.1K0
在 Linux 上使用 Lutries 管理你的游戏
,一个 Linux 上的开源游戏平台。你可以使用 Lutries 安装、移除、配置、启动和管理你的游戏。它可以在一个单一界面中帮你管理你的 Linux 游戏、Windows 游戏、仿真控制台游戏和浏览器游戏。它还包含社区编写的安装脚本,使得游戏的安装过程更加简单。
知忆
2021/06/17
1.6K0
Unity和C#游戏编程入门:创建迷宫小球游戏示例
当涉及到Unity和C#游戏编程入门时,以下是一些示例代码,可以帮助初学者更好地理解这个领域的基础概念。我们将展示一个简单的示例,创建一个在Unity中控制的小球,并使用C#脚本来控制其运动。请确保你已经按照前文的步骤安装了Unity和学习了基础的C#编程知识。
海拥
2023/09/13
6530
【100个 Unity实用技能】 | 脚本无需挂载到游戏对象上也可执行的方法
通常情况下,新建的脚本要挂载到游戏对象上才能运行。下面讲一个脚本无需挂载也可执行的方法。
呆呆敲代码的小Y
2023/03/09
1.3K0
【100个 Unity实用技能】 | 脚本无需挂载到游戏对象上也可执行的方法
python 面向对象编程 - 小游戏
面向对象写的小游戏 欢迎玩耍 class Omnicience: camp = 'Omniscience' def __init__(self, name, atk=100, hp=1000, mp=500, power=500, lever=1, atk
小小咸鱼YwY
2019/07/24
7750
怎样让小程序小游戏也可以在自己的App上架运行?
如今越来越多的厂商涌入了小游戏的战场当中,各路都想在小游戏领域分腾讯一杯羹,而微信也早已经不是一家独大的局面,各路厂商在奋起直追。随着小游戏的开发者们越来越多,或许,小游戏的风口才刚刚开始。
用户10245619
2023/02/14
8930
Python面向对象设计一个游戏类
设计一个父类,表示游戏角色:派生出多个子类用于表示不同职业的角色,为每一个类设置必要的属性和方法,并实例化对象进行测试。
里克贝斯
2021/05/21
4790
Python面向对象设计一个游戏类
桌面应用|在 Linux 上使用 Lutries 管理你的游戏
今天我们要讨论的是Lutris,一个Linux上的开源游戏平台。你可以使用Lutries安装、移除、配置、启动和管理你的游戏。它可以在一个单一界面中帮你管理你的Linux游戏、Windows游戏、仿真控制台游戏和浏览器游戏。它还包含社区编写的安装脚本,使得游戏的安装过程更加简单。
用户8710643
2021/07/12
1.4K0
棋盘游戏游戏在人工智能游戏学习中的教育与研究
原文标题:General Board Game Playing for Education and Research in Generic AI Game Learning
Jarvis Cocker
2019/07/17
5800
5款在Linux上的竞速飞行类开源游戏
自古以来,游戏一直是Linux的痛点之一。即使最近几年,由于Steam、GOG和其他企图将商业游戏引入Linux的努力,让这个痛点得到了一定程度的缓解,但是这些游戏通常是不开源的。当然,你可以在开源操作系统上玩游戏,但对于开源纯粹主义者来说,显然这还不够完美。
五月Rambo
2019/12/09
3K0
5款在Linux上的竞速飞行类开源游戏

相似问题

在另一个游戏对象Unity3D上移动游戏对象

110

Unity:玩家对象被销毁后暂停游戏

34

如何防止在Unity中运行游戏时禁用游戏对象?

112

检测游戏对象上的触摸

28

在Unity中摇动游戏对象

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文