U3d插件——Swarm Object Manager分析(一)Main和 ship(角色)

本文介绍了Unity3D插件Swarm Object Manager,主要用于群对象物体的管理,尤其适用于子弹和粒子系统的高效利用。文章分析了Main类的Singleton设计模式,以及在Start和Update方法中如何初始化和更新各个管理者。Ship类作为玩家角色,实现了根据用户输入进行旋转和发射子弹的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swarm Object Manager这个插件,是用来管理群对象物体的,对于像是子弹或者是粒子系统这样重复利用率很高的东西十分有效

先看看Main函数,首先定义了一个静态的实例,方便后面的各种物体创建对象的时候使用
    private static Main _instance = null;
    public static Main Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = FindObjectOfType(typeof(Main)) as Main;

                if (_instance == null && Application.isEditor)
                    Debug.LogError("Could not locate a Main object. You have to have exactly one Main in the scene.");
            }

            return _instance;
        }
    }    
   
    void Awake()
    {
        if (_instance != null)
        {
            Debug.LogError("You can only have one instance of the Main singleton object in existence.");
        }
        else
            _instance = this;        
    }    

然后确定场景中的人物和 子弹管理者,粒子系统管理者,确保init和 updata  注意这里是通过主函数的update对子物体的framupdate来调用   
    void Start()
    {
        ship.Initialize();
        asteroidManager.Initialize();
        bulletManager.Initialize();
        explosionManager.Initialize();
    }
   
    void Update()
    {
        ship.FrameUpdate();
        asteroidManager.FrameUpdate();
        bulletManager.FrameUpdate();
        explosionManager.FrameUpdate();
    }
这样看  这个main函数的思路已经十分清晰了obj

- -我想过一些缺陷的地方,就是事件的调用可能会比较混乱,但是如果事件不多只有鼠标的position的话那就不是问题了

//还有一个ship   可以看做是玩家的化身,用来发出动作
public class Ship : MonoBehaviour
{
    private Transform _thisTransform;
   
    public float turnSpeed;
    public float bulletSpeed;
   
    public void Initialize()
    {
        _thisTransform = this.transform;
    }
   
    public void FrameUpdate()   //处理动作
    {
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            _thisTransform.RotateAround(Vector3.back, -turnSpeed * Time.deltaTime);
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            _thisTransform.RotateAround(Vector3.back, turnSpeed * Time.deltaTime);
        }
       
        if (Input.GetKeyDown(KeyCode.LeftControl) || Input.GetKeyDown(KeyCode.RightControl))
        {
            Bullet bullet = (Bullet)Main.Instance.bulletManager.ActivateItem();
            if (bullet != null)
                bullet.Fire(_thisTransform.up * bulletSpeed);
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值