【问题标题】:pushing character in a direction consistently in Unity在 Unity 中始终如一地将角色推向一个方向
【发布时间】:2018-10-25 00:03:52
【问题描述】:

我有一个发射气泡的粒子效果,当角色进入气泡流时,我想创建气泡始终沿其前进方向移动角色的效果。我该怎么做呢?我已经在粒子效果中放置了一个对撞机,并且到目前为止已经尝试过这段代码。

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

public class GeyserPush : MonoBehaviour {

    public GameObject Player;
    public float Speed;



    private void OnTriggerEnter(Collider other)
    {
        if(other.gameObject == Player)
        {
            //other.transform.Translate((Vector3.up * Time.deltaTime), Space.World);
            Player.transform.Translate(Vector3.up * Time.deltaTime * Speed);
            print("Pushing");
        }
    }


    private void OnTriggerExit(Collider other)
    {
        if (other.gameObject == Player)
        {

        }
    }
}

代码不完整,因为我还没有完整的解决方案。该角色也确实配备了刚体。

【问题讨论】:

  • 自从我使用 Unity 已经有一段时间了,但我的理解是 OnTriggerEnter 在对象碰撞时只运行一次。您想将该代码放入游戏循环(Update 函数)中,以检查玩家和对撞机是否重叠/接触。
  • 这很好。我必须记住这一点。

标签: c# unity3d rigid-bodies


【解决方案1】:

根据this link底部的表格,如果粒子和玩家都有Rigidbody,那么使用OnCollisionEnter()可能会更好。

您可以在每次碰撞时在玩家的Rigidbody 上添加一个力,沿着您的粒子移动的方向,如下所示:

private void OnCollisionEnter(Collider other)
{
    if(other.gameObject == Player)
    {
        //other.transform.Translate((Vector3.up * Time.deltaTime), Space.World);
        Player.GetComponent<Rigidbody>().AddForce(targetDirection * Speed);
        print("Pushing");
    }
}

【讨论】:

  • 我愿意尝试一下,但是我将particleDirection 称为什么/如何?
  • @shinjabo 我已经编辑了我的答案。根据您提供的代码,我假设您只想让粒子向上推动玩家,所以targetDirection 可以是您之前使用的Vector3.up
  • 这行得通,但奇怪的是当“是触发器”被选中时,盒子碰撞器不会使脚本工作,但是当我取消选中它并将我的角色放在粒子效果中进行测试时确实有效。当然,我无法让角色脱离粒子效果,因为我被盒子碰撞器包围了。有什么建议吗?
  • @shinjabo 首先,我认为检查isTrigger 不是一个好主意,因为它通常用于触发量,而不是像您尝试实施的实际碰撞。其次,如果我错了,请纠正我,但似乎你给整个粒子系统一个Collider,而它应该在粒子本身上
  • @shinjabo ParticleSystem 组件带有一个Collision 模块,可以满足您的需求。在那里,您可以指定粒子碰撞的对象以及碰撞响应
猜你喜欢
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多