查看: 3233|回复: 2
打印 上一主题 下一主题

[经验分享] 物体间引力模拟效果

[复制链接]
ZackD    

715

主题

22

听众

4万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
26224
精华
17

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2013-9-26 15:54:04 |只看该作者 |倒序浏览
在真实的宇宙中,小星球总是被大星球吸引过去,其实就是一种力的作用,在unity3d中如何来模拟这种效果呢?
1、在场景中建两个球体,当然,球的大小无所谓,为了区别,我们将之称为大球,小球。
2、给小球加上刚体组件,在属性面板中去掉重力选项。新建一“min”层,将小球添加到此层中。
3、新建c++代码文件,将到下代码拷贝其中,并将其附着到大球上,属性面板中即显示此代码组件,设置其引力层为“min”,设置其半径及引力大小。
4、进行游戏模式,移动大球至小球附近,小球即被慢慢吸走。引力效果实现。
using UnityEngine;
using System.Collections;
public class Magnetic : MonoBehaviour
{
    public LayerMask m_MagneticLayers;
    public Vector3 m_Position;
    public float m_Radius;
    public float m_Force;
    void FixedUpdate ()
    {
        Collider[] colliders;
        Rigidbody rigidbody;
        colliders = Physics.Overlapsphere (transform.position + m_Position, m_Radius, m_MagneticLayers);
        foreach (Collider collider in colliders)
        {
            rigidbody = (Rigidbody) collider.gameObject.GetComponent (typeof (Rigidbody));
            if (rigidbody == null)
            {
                continue;
            }
            rigidbody.AddExplosionForce (m_Force * -1, transform.position + m_Position, m_Radius);
        }
    }
    void OnDrawGizmosSelected ()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere (transform.position + m_Position, m_Radius);
    }
}
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

4

主题

0

听众

1447

积分

助理设计师

Rank: 4

纳金币
47
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-9-26 15:37:27 |只看该作者
colliders = Physics.Overlapsphere (transform.position + m_Position, m_Radius, m_MagneticLayers);其中Overlapsphere()只接受俩个参数,并没有后面层的参数。
回复

使用道具 举报

0

主题

2

听众

1346

积分

助理设计师

Rank: 4

纳金币
505
精华
0
板凳
发表于 2014-9-26 22:48:09 |只看该作者
谢谢指导
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-16 05:24 , Processed in 0.309409 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部