Пример #1
0
    protected override void Execute(List <GameEntity> entities)
    {
        foreach (var agent in entities)
        {
            AgentPosComponent     pos     = agent.agentPos;
            LastAgentPosComponent lastPos = agent.lastAgentPos;

            float dx = pos.x - lastPos.x;
            float dy = pos.y - lastPos.y;
            float dz = pos.z - lastPos.z;

            agent.ReplaceAgentRot(dx, dy, dz);

            agent.view.skin.transform.rotation = UnityEngine.Quaternion.LookRotation(new UnityEngine.Vector3(dx, dy, dz));
        }
    }
    protected override void Execute(List <GameEntity> entities)
    {
        foreach (var agent in entities)
        {
            if (agent.view.skin == null)
            {
                UnityEngine.GameObject prefab = UnityEngine.Resources.Load("NPC") as UnityEngine.GameObject;
                if (null != prefab)
                {
                    agent.view.skin = UnityEngine.GameObject.Instantiate(prefab);
                }
            }

            AgentPosComponent agentPos = agent.agentPos;
            agent.view.skin.transform.position = new UnityEngine.Vector3(agentPos.x, agentPos.y, agentPos.z);
        }
    }
    protected override void Execute(List <GameEntity> entities)
    {
        foreach (var agent in entities)
        {
            if (agent.hasAgentPos)
            {
                MoveTargetComponent endPos = agent.moveTarget;
                AgentPosComponent   curPos = agent.agentPos;

                float dx = endPos.dx - curPos.x;
                float dy = endPos.dy - curPos.y;
                float dz = endPos.dz - curPos.z;

                float speed = 0.05f;

                float dis = (float)System.Math.Sqrt(dx * dx + dy * dy + dz * dz);

                if (dis <= speed)
                {
                    agent.ReplaceLastAgentPos(endPos.dx, endPos.dy, endPos.dz);
                    agent.ReplaceAgentPos(endPos.dx, endPos.dy, endPos.dz);
                    agent.RemoveMove();
                    agent.RemoveMoveTarget();
                    continue;
                }

                if (dis != 0)
                {
                    dx /= dis;
                    dy /= dis;
                    dz /= dis;
                }

                float sx = curPos.x + dx * speed;
                float sy = curPos.y + dy * speed;
                float sz = curPos.z + dz * speed;

                agent.ReplaceLastAgentPos(curPos.x, curPos.y, curPos.z);
                agent.ReplaceAgentPos(sx, sy, sz);
            }
        }
    }